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中不存在,只在源码中有,他是个受保护的类。)