Java InputStream.read(byte [],int,int)方法,如何阻塞,直到读取了确切的字节数

gd1*_*gd1 10 java inputstream

我正在编写一个简单的客户端/服务器网络应用程序,通过TCP套接字发送和接收固定大小的消息.

到目前为止,我一直在使用getInputStream()getOutputStream()该方法的Socket类来获取数据流,然后调用read(byte[] b, int off, int len)该方法InputStream的类读取每个时间(这是一个消息的大小),60个字节.

后来,我阅读了该方法的Javadoc:

public int read(byte [] b,int off,int len)抛出IOException

将输入流中最多 len个字节的数据读入一个字节数组.尝试读取len个字节,但可以读取较小的数字.实际读取的字节数以整数形式返回.

我想知道是否有任何Java"开箱即用"的解决方案要阻止,直到len字节被读取,必要时永远等待.

我显然可以创建一个简单的循环,但我觉得我正在重新发明轮子.你能建议我一个干净的Java感知解决方案吗?

Ale*_*yak 25

使用DataInputStream.readFully.这是JavaDoc

InputStream in = ...
DataInputStream dis = new DataInputStream( in );
byte[] array = ...

dis.readFully( array );
Run Code Online (Sandbox Code Playgroud)