DataInputStream.read() vs DataInputStream.readFully()

2022-09-03 14:16:08

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


答案 1

状态的 Javadoc:DataInput.readFully(byte[] b)

从输入流中读取一些字节,并将它们存储到缓冲区数组 中。读取的字节数等于 b 的长度b

状态的 Javadoc:DataInputStream.read(byte[] b)

从包含的输入流中读取一定数量的字节,并将它们存储到缓冲区数组中。实际读取的字节数以整数形式返回。此方法将阻止,直到输入数据可用、检测到文件末尾或引发异常b

基本上,将读取确切的字节,而将读取,也许更少,从输入流中可用的任何内容。readFully()b.lengthread()b.length


答案 2

使用读取,您需要检查返回值以了解实际读取了多少字节

byte[] buffer = new byte[100];
if (in.read(buffer) < 100){
   // fail
   }

相反如果无法读取100个字节,则将抛出一个IOException,不需要检查返回值,简化一下。


推荐