`

网络(socket)流与文件流的可用字节数available用法

    博客分类:
  • Java
阅读更多

在网络流中如果不使用任何标记,是不知道流是否结束的。但在读到网络流时,我们是可以知道这次可以读多少字节的内容,方法就是使用inputStream. available (),但一定要在调用read()至少一次之后,也就是说available方法一定要在read后调用,不然就只能得到零值。注,这里所的是网络传输中的流是这样,但文件流不是这样的,文件流可以直接使用available来判断还有多少字节的内容可读取。


InputStream的available()含义:返回此输入流在不受阻塞情况下能读取的字节数。网络流与文件流不同的关键就在于是否“受阻”二字,网络socket流在读取时如果没有内容read()方法是会受阻的,所以从socket初始化的输入流的available也是为零的,所以要read一字节后再使用,这样可用的字节数就等于 available + 1。但文件读取时read()一般是不会受阻的,因为文件流的可用字节数
available = file.length(),而文件的内容长度在创建File对象时就已知了。
注:类InputStream的available方法总是返回0。

网络socket输入流可用字节数代码所示:

//将接收到的数据存到字节数组array
int firstChar = inputStream.read();
int length = inputStream.available();
byte[] array = new byte[length+1];
array[0] = (byte)firstChar;
inputStream.read(array,1,length);


文件流的可用字节数如代码所示:

FileInputStream fi = new FileInputStream("e:/tmp/tmp");
 //循环读出所有文件内容,可以在read前就直接使用
while (fi.available() > 0) {
    System.out.println((byte) fi.read());//直接输出内容的编码,而非字符编码。可能为负,如二进制的图片文件
}
fi.close();

 

 

分享到:
评论
2 楼 zhonghuayu121 2012-08-09  
服务端 ;InputStream is = socket.getInputStream(); //获取Socket输入流

客户端:ops.write(fileIsAndFileName.fileName.getBytes().length&0xff); ops.write(new String(fileIsAndFileName.fileName.getBytes()).getBytes());  大侠,我在客户端发送文件流之前压缩了这个文件的文件名以及文件类型(相当于扩展名吧)。但是我在服务端解压的时候,我该怎么把这个扩展名和文件流分别取出来呢?
1 楼 suitmefine 2010-06-02  
太感谢了!这个问题正困扰着呢,原来是这么回事情。学习了!

相关推荐

    c++,java,php,c# 的网络字节流读写文件

    在编程领域,网络字节流读写文件是网络通信和数据传输中的常见操作。本文将深入探讨C++、Java、PHP和C#这四种语言...在实际应用中,开发者需要根据项目需求和性能考虑,选择合适的语言和方法来实现网络字节流读写文件。

    JAVA Socket编程实现文件上传

    3. **字节流传输**:由于文件可能是任意字节的组合,因此文件传输通常使用字节流。Socket提供InputStream和OutputStream,它们都是基于字节的。客户端可以将FileInputStream中的字节流通过Socket的OutputStream传递...

    python:socket传输大文件示例

    接收完成后,关闭文件流。 6. **异常处理**: - 在文件传输过程中可能会遇到网络中断等问题,因此需要捕获并处理可能的异常,例如在接收文件数据时,如果没有接收到数据,可能是客户端已经关闭连接。 7. **线程...

    C#Socket文件传输简单例子(将文件名和文件同时传输)

    本示例主要探讨如何使用C#的Socket类进行文件的传输,包括文件名和文件内容的同步发送与接收。这里我们将详细讲解实现这一功能的关键步骤和相关知识点。 首先,了解Socket的工作原理。Socket是TCP/IP协议栈的一部分...

    Java socket字节流传输示例解析

    Java Socket字节流传输是Java网络编程中常用的一种通信方式,它允许两个应用程序通过网络进行数据交换。在Java中,Socket提供了基于TCP/IP协议的低级别通信接口,而字节流则是处理数据的基本单位,适合处理任何类型...

    android使用socket上传、下载文件

    2. 文件读写:与服务器端类似,客户端也需要获取Socket的输入流和输出流,进行文件的读取或写入操作。 **三、文件上传流程** 1. 客户端选择本地文件,读取文件内容到字节数组。 2. 通过Socket的OutputStream将字节...

    socket传输字节和字符串

    使用Socket发送字节,我们需要将数据转换为字节数组,然后调用Socket的OutputStream(如Socket.getOutputStream()返回的OutputStream)的write方法,将字节数组写入网络流。接收端则通过Socket的InputStream读取这些...

    Socket传输大文件(发送与接收源码)

    - 大文件发送时,需要将文件读取为字节流,然后以适当大小的数据块分多次发送。每次调用`Send()`方法发送数据块,并确保数据完整发送。 2. **客户端(SocketClient)**: - 客户端需要创建Socket实例,指定服务器...

    C# Socket 发送接收文件,消息

    同时,可能需要跟踪已接收的字节数,以便知道何时完成接收。 5. **服务器下发文件**: 当服务器需要向多个客户端下发文件时,可以创建一个监听Socket来接受连接请求。每当有新连接时,创建一个新的Socket实例来...

    io流详解,字符流和字节流代码

    通过代码示例和图片截图,你可以更直观地了解这些流的工作原理和使用方法,加深对Java IO的理解。实践中,你需要根据实际需求选择合适的流类型,合理使用缓冲、转换和多线程通信等功能,以实现高效、灵活的数据传输...

    java socket 视频流转发socket

    在"Java Socket 视频流转发Socket"这个主题中,我们将深入探讨如何使用Java Socket来处理视频流的传输。 首先,让我们了解什么是ServerSocket。在Java中,`java.net.ServerSocket`类是服务器端使用的,它监听特定...

    IO各种操作文件,字符流、字节流等

    在上传和下载文件时,通常涉及到网络IO,Java提供了Socket和ServerSocket类处理客户端和服务器之间的连接,而InputStream和OutputStream则负责数据传输。此外,HTTP协议的文件上传下载可以使用HttpURLConnection或者...

    ByteIO_java_字节流_

    通过`Socket`类的`getInputStream()`和`getOutputStream()`方法,可以获取到与远程服务器连接的字节流。 总的来说,`ByteIO.java`文件可能包含了字节流的基本用法,如文件读写、数据传输、缓冲优化等。通过学习和...

    Java Socket聊天和文件传输工具

    - **文件流**:在Java中,可以使用`FileInputStream`和`FileOutputStream`进行文件的读写操作。文件传输时,将文件转换为字节流,然后通过Socket的输出流发送到服务器,服务器端再通过输入流接收并保存到本地。 - ...

    基于socket的文件传输

    在服务器端,我们通常会使用FileInputStream来读取本地文件,并将读取到的数据通过Socket的OutputStream写入网络。客户端则相反,它接收来自服务器的数据,通过Socket的InputStream读取,并用FileOutputStream将数据...

    Socket网络编程之文件上传下载源码

    Socket网络编程是网络通信的基础,尤其在开发涉及服务器与客户端交互的应用时,如文件上传和下载功能。在这个场景中,我们将深入探讨如何使用Java的Socket API实现文件的上传和下载功能。 TCP(Transmission ...

    java socket传输各种格式文件

    Java Socket编程是网络编程的...通过理解Socket的基本概念,结合文件流操作,我们可以构建出高效、安全的文件传输系统。在实际应用中,还需要考虑网络环境、错误处理、安全性等多个方面,以确保系统的稳定性和可靠性。

    C语言socket通讯TXT文件传输

    在socket通信中,读取文件内容并将其转化为字节流,然后通过socket发送;服务器端接收到字节流后,再写入到本地文件。 6. **数据分块传输**:大文件传输时,通常需要分块处理,以避免一次性加载大量数据导致内存...

    c# socket 传输文件

    - 如果需要在不安全的网络环境中传输文件,可以考虑使用SSL/TLS加密Socket,提供数据传输的安全性。 10. **示例代码** ```csharp // Server端简化示例 Socket serverSocket = new Socket(AddressFamily....

    Java实现字节流与图片的转化Java源码

    本教程将详细讲解如何使用Java实现字节流与图片之间的转换,这对于在网络上传输或者存储图片等二进制数据至关重要。 首先,我们需要了解Java中的字节流。Java提供了两种类型的字节流:输入流(InputStream)和输出...

Global site tag (gtag.js) - Google Analytics