在网络流中如果不使用任何标记,是不知道流是否结束的。但在读到网络流时,我们是可以知道这次可以读多少字节的内容,方法就是使用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();
分享到:
相关推荐
在编程领域,网络字节流读写文件是网络通信和数据传输中的常见操作。本文将深入探讨C++、Java、PHP和C#这四种语言...在实际应用中,开发者需要根据项目需求和性能考虑,选择合适的语言和方法来实现网络字节流读写文件。
3. **字节流传输**:由于文件可能是任意字节的组合,因此文件传输通常使用字节流。Socket提供InputStream和OutputStream,它们都是基于字节的。客户端可以将FileInputStream中的字节流通过Socket的OutputStream传递...
接收完成后,关闭文件流。 6. **异常处理**: - 在文件传输过程中可能会遇到网络中断等问题,因此需要捕获并处理可能的异常,例如在接收文件数据时,如果没有接收到数据,可能是客户端已经关闭连接。 7. **线程...
本示例主要探讨如何使用C#的Socket类进行文件的传输,包括文件名和文件内容的同步发送与接收。这里我们将详细讲解实现这一功能的关键步骤和相关知识点。 首先,了解Socket的工作原理。Socket是TCP/IP协议栈的一部分...
Java Socket字节流传输是Java网络编程中常用的一种通信方式,它允许两个应用程序通过网络进行数据交换。在Java中,Socket提供了基于TCP/IP协议的低级别通信接口,而字节流则是处理数据的基本单位,适合处理任何类型...
2. 文件读写:与服务器端类似,客户端也需要获取Socket的输入流和输出流,进行文件的读取或写入操作。 **三、文件上传流程** 1. 客户端选择本地文件,读取文件内容到字节数组。 2. 通过Socket的OutputStream将字节...
使用Socket发送字节,我们需要将数据转换为字节数组,然后调用Socket的OutputStream(如Socket.getOutputStream()返回的OutputStream)的write方法,将字节数组写入网络流。接收端则通过Socket的InputStream读取这些...
- 大文件发送时,需要将文件读取为字节流,然后以适当大小的数据块分多次发送。每次调用`Send()`方法发送数据块,并确保数据完整发送。 2. **客户端(SocketClient)**: - 客户端需要创建Socket实例,指定服务器...
同时,可能需要跟踪已接收的字节数,以便知道何时完成接收。 5. **服务器下发文件**: 当服务器需要向多个客户端下发文件时,可以创建一个监听Socket来接受连接请求。每当有新连接时,创建一个新的Socket实例来...
通过代码示例和图片截图,你可以更直观地了解这些流的工作原理和使用方法,加深对Java IO的理解。实践中,你需要根据实际需求选择合适的流类型,合理使用缓冲、转换和多线程通信等功能,以实现高效、灵活的数据传输...
在"Java Socket 视频流转发Socket"这个主题中,我们将深入探讨如何使用Java Socket来处理视频流的传输。 首先,让我们了解什么是ServerSocket。在Java中,`java.net.ServerSocket`类是服务器端使用的,它监听特定...
在上传和下载文件时,通常涉及到网络IO,Java提供了Socket和ServerSocket类处理客户端和服务器之间的连接,而InputStream和OutputStream则负责数据传输。此外,HTTP协议的文件上传下载可以使用HttpURLConnection或者...
通过`Socket`类的`getInputStream()`和`getOutputStream()`方法,可以获取到与远程服务器连接的字节流。 总的来说,`ByteIO.java`文件可能包含了字节流的基本用法,如文件读写、数据传输、缓冲优化等。通过学习和...
- **文件流**:在Java中,可以使用`FileInputStream`和`FileOutputStream`进行文件的读写操作。文件传输时,将文件转换为字节流,然后通过Socket的输出流发送到服务器,服务器端再通过输入流接收并保存到本地。 - ...
在服务器端,我们通常会使用FileInputStream来读取本地文件,并将读取到的数据通过Socket的OutputStream写入网络。客户端则相反,它接收来自服务器的数据,通过Socket的InputStream读取,并用FileOutputStream将数据...
Socket网络编程是网络通信的基础,尤其在开发涉及服务器与客户端交互的应用时,如文件上传和下载功能。在这个场景中,我们将深入探讨如何使用Java的Socket API实现文件的上传和下载功能。 TCP(Transmission ...
Java Socket编程是网络编程的...通过理解Socket的基本概念,结合文件流操作,我们可以构建出高效、安全的文件传输系统。在实际应用中,还需要考虑网络环境、错误处理、安全性等多个方面,以确保系统的稳定性和可靠性。
在socket通信中,读取文件内容并将其转化为字节流,然后通过socket发送;服务器端接收到字节流后,再写入到本地文件。 6. **数据分块传输**:大文件传输时,通常需要分块处理,以避免一次性加载大量数据导致内存...
- 如果需要在不安全的网络环境中传输文件,可以考虑使用SSL/TLS加密Socket,提供数据传输的安全性。 10. **示例代码** ```csharp // Server端简化示例 Socket serverSocket = new Socket(AddressFamily....
本教程将详细讲解如何使用Java实现字节流与图片之间的转换,这对于在网络上传输或者存储图片等二进制数据至关重要。 首先,我们需要了解Java中的字节流。Java提供了两种类型的字节流:输入流(InputStream)和输出...