PrintWriter 类中println和write方法的区别

问题:编写Socket聊天软件,使用PrintWriter类取得Socket对象的输出流,使用println和write两个方法来完成向输出流中写出,用println没有问题,但是用write没有反应,即写出去后,对方读不到。

 

Google查了一下,问题解释如下:

 

为什么客户端调用了write()和flush()后,服务器端依然read不到数据。因为socket.getOutputStream()取到的实现类是java.net.SocketOutputStream,这个类并没有覆写flush方法,它的父类java.io.FileOutputStream也没有覆写,于是最终就调到了最顶层java.io.OutputStream的flush()方法,这就恶心了,这个方法是空的。于是...

因此,还是使用Reader.readLine()和Writer.println()来处理socket吧,或者直接使用NIO。

(注意,SocketOutputStream类在JavaDoc中不存在,只在源码中有,他是个受保护的类。)

你可能感兴趣的:(java,.net,socket,Google)