DataInputStream.read()vs DataInputStream.readFully()

时间:2014-09-17 18:17:09

标签: java sockets java-io

我正在制作一个简单的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() 那么我可以假设它是一样的吗?

2 个答案:

答案 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,不需要检查返回值,简化一下。