我正在制作一个简单的TCP/IP套接字应用程序
这样做有什么不同:
DataInputStream in = new DataInputStream(clientSocket.getInputStream());
byte[] buffer = new byte[100];
in.readFully(buffer);而不是这样做:
DataInputStream in = new DataInputStream(clientSocket.getInputStream());
byte[] buffer = new byte[100];
in.read(buffer);我看过文档,它们有相同的描述。readFully()和read(),所以我能假设它是一回事吗?
发布于 2014-09-18 04:48:13
DataInput.readFully(byte[] b)的Javadoc声明:
从输入流中读取一些字节并将它们存储到缓冲区数组
b中。读取的字节数等于b.的长度
DataInputStream.read(byte[] b)的Javadoc声明:
从包含的输入流中读取一定数量的字节,并将它们存储到缓冲区数组
b中。实际读取的字节数以整数形式返回。此方法会一直阻塞,直到输入数据可用、检测到文件结尾或抛出异常。
基本上,readFully()将准确地读取b.length字节,而read()将读取最多b.length,或者更少,只要输入流可用。
发布于 2018-02-12 03:14:29
使用 read 时,您需要检查返回值,以了解实际读取了多少字节
byte[] buffer = new byte[100];
if (in.read(buffer) < 100){
// fail
}取而代之的是readFully,如果不能读取100个字节,就会抛出一个IOException,不需要检查返回值,简化一点。
https://stackoverflow.com/questions/25897627
复制相似问题