最近在学习socket,模拟书本上的代码时,发现在服务端向客户端发送返回数据时,客户端读取到的数据不完整。
当时的情况时这样,服务端使用 OutputStream out = new BufferedOutputStream(connection.getOutputStream());
connection是服务端socket accept后得到的socket
输出流在write后调用flush()方法刷新并发送。而客户端在InputStream in = socket.getInputStream()得到输入流后,如果调用in.read(),一次读取一个字节的话,会造成最后输出的数据不全。 后来查询并实验发现,只有在使用类似read(byte[] b),read(byte[] b, int off, int len)时才会正确读取数据。
说实话具体什么原因我还是没特别明白,不知道和网络通信环境有没有关系。 但一次读取一个字节的话效率也是非常低的。所以以后要尽量避免使用read()方法。
本文探讨了在网络编程中使用Socket时遇到的问题:服务端向客户端发送数据时,客户端使用不同方式读取数据的效果差异。文章指出,使用read(byte[] b)及变种方法能有效解决数据读取不完整的问题,并提高效率。
3673

被折叠的 条评论
为什么被折叠?



