我正在制作一个简单的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()
那么我可以假设它是一样的吗?
答案 0 :(得分:10)
DataInput.readFully(byte[] b)
州的Javadoc:
从输入流中读取一些字节并将它们存储到缓冲区中 数组
b
。 读取的字节数等于b
的长度。
DataInputStream.read(byte[] b)
州的Javadoc:
从包含的输入流中读取一些字节并存储 它们进入缓冲区数组
b
。 实际读取的字节数是 以整数形式返回。此方法将阻塞,直到输入数据为止 可用,检测到文件结尾,或抛出异常。
基本上,readFully()
将读取完全 b.length
字节,而read()
将读取最多 b.length
,可能更少,无论输入流中有什么。
答案 1 :(得分:0)
使用读取,您需要检查返回值以了解真正读取了多少字节
byte[] buffer = new byte[100];
if (in.read(buffer) < 100){
// fail
}
而不是 readFully 如果无法读取100个字节,则不会抛出IOException,不需要检查返回值,简化一下。