DataInputStream.read() vs DataInputStream.readFully()

心已入冬 提交于 2019-12-29 06:52:20

问题


Im making a simple TCP/IP Socket app

Whats the different between doing this:

DataInputStream in = new DataInputStream(clientSocket.getInputStream());

byte[] buffer = new byte[100];
in.readFully(buffer);

versus doing this:

DataInputStream in = new DataInputStream(clientSocket.getInputStream());

byte[] buffer = new byte[100];
in.read(buffer);

I had a look at the documentation, they have the same exact description. readFully() and read() So can I assume its the same thing?


回答1:


The Javadoc for DataInput.readFully(byte[] b) states:

Reads some bytes from an input stream and stores them into the buffer array b. The number of bytes read is equal to the length of b.

The Javadoc for DataInputStream.read(byte[] b) states:

Reads some number of bytes from the contained input stream and stores them into the buffer array b. The number of bytes actually read is returned as an integer. This method blocks until input data is available, end of file is detected, or an exception is thrown.

Basically, readFully() will read exactly b.length bytes, whereas read() will read up to b.length, maybe less, whatever is available from the input stream.




回答2:


Using read you need to check return value to know how many bytes have been really read

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

instead with readFully a IOException will be thrown if the 100 bytes could not be read, don't need to check return value, simplify a bit.



来源:https://stackoverflow.com/questions/25897627/datainputstream-read-vs-datainputstream-readfully

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!