我正在编写一个简单的客户端/服务器网络应用程序来发送和接收固定尺寸通过 TCP 套接字发送消息。
到目前为止,我一直在使用getInputStream()
and getOutputStream()
的方法Socket
类来获取流,然后调用read(byte[] b, int off, int len)
的方法InputStream
每次读取 60 个字节(这是一条消息的大小)。
后来,我阅读了该方法的 Javadoc:
公共 int 读取(字节 [] b,
关闭,
国际长度)
抛出 IOException
Reads up to将输入流中的 len 个字节的数据放入数组中
字节。尝试读取 len 个字节,但较小的
可以读取号码。实际读取的字节数返回为
一个整数。
我想知道是否有任何Java“开箱即用”的解决方案可以阻止直到len字节已被读取,如有必要,将永远等待。
显然我可以创建一个简单的循环,但我觉得我正在重新发明轮子。您能给我推荐一个干净且支持 Java 的解决方案吗?
Use DataInputStream.readFully
. Its Javadocs http://docs.oracle.com/javase/8/docs/api/java/io/DataInputStream.html#readFully-byte:A-将读者引导至DataInput
Javadocs https://docs.oracle.com/javase/8/docs/api/java/io/DataInput.html#readFully-byte:A-Javadocs,其中指出:
从输入流中读取一些字节并将它们存储到缓冲区数组中b
。读取的字节数等于长度b
.
InputStream in = ...
DataInputStream dis = new DataInputStream( in );
byte[] array = ...
dis.readFully( array );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)