最近在学习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()方法。