簡體   English   中英

Java客戶端/服務器 - 使用BufferedWriter而不是PrintWriter

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM