![](/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.