![](/img/trans.png)
[英]Difference between java.io.PrintWriter and java.io.BufferedWriter?
[英]Java Client/Server - Using BufferedWriter instead of PrintWriter
在Java客户端/服务器的所有示例中,我已经看到用于接收数据的BufferedReader
,例如
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
和PrintWriter
一起发送数据,比如
PrintWriter writer = new PrintWriter(socket.getOutputStream());
但我不能只使用BufferedWriter
而不是PrintWriter
吗? 我只需要在客户端和服务器之间发送未格式化的字符串,因此BufferedWriter
应该提供更好的性能(而不是这是一个问题)。
PrintWriter本质上提供了围绕Writer的便捷方法。 如果你不需要那些方便的方法 - 但只需要编写字符 - 那么在功能上,你可以使用你选择的任何类型的Writer,包括'raw'OutputStreamWriter。
如果您一次只编写一个字符,并且您的套接字流没有缓冲,那么建议在某处使用BufferedWriter或在原始输出流周围包装BufferedOuputStream进行缓冲。 通常不需要执行此操作的示例是在servlet中,传递给servlet的流通常已经缓冲。
PrintWriter还具有在写入方法上吞咽异常的“功能”,然后您必须使用checkError()[实际执行此操作,以及谁只是假定写入成功...]进行显式检查。 这可能是也可能不是......
当然你可以使用BufferedWriter
。 PrintWriter
通常用于协调,因为它提供了一系列功能而无需额外的异常处理(这通常使示例更容易)。 如果需要, PrintWriter
还可以将其操作委托给BufferedWriter
。
关于性能,请参阅BufferedWriter
的javadoc
通常,Writer会立即将其输出发送到基础字符或字节流。 除非需要提示输出,否则建议将BufferedWriter包装在任何write()操作可能代价高昂的Writer周围,例如FileWriters和OutputStreamWriters。
PrintWriter有什么问题? 匹配是因为方便的readLine / writeLine匹配。 你在BufferedWriter中没有那么方便。 您还可以使用PrintWriter指定autoflush。
如果需要缓冲区,可以将BufferedWriter包装在PrintWriter中
PrintWriter pw = new PrintWriter( new BufferedWriter( ... ) );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.