我想寫入一個套接字。從閱讀有關網絡IO,在我看來是寫的最佳方式是做這樣的事情:將BufferedWriter和BufferedOutputStream一起使用是否過分矯枉過正?
OutputStream outs=null;
BufferedWriter out=null;
out =
new BufferedWriter(
new OutputStreamWriter(new BufferedOutputStream(outs),"UTF-8"));
的BufferedWriter
將緩衝輸入到其建議的OutputStreamWriter
,因爲它阻止了作家從爲每個角色啓動編碼器。
然後BufferedOutputStream
將緩衝來自Writer
的字節,以避免一次一個字節可能放到網絡上。
它看起來有點像矯枉過正,但它似乎都有幫助? 感謝您的幫助..
編輯:根據JavaDoc上OutputStreamWriter
:
寫入中的每一個調用()方法會導致在給定的字符(或多個)將被調用的編碼轉換器。生成的字節在寫入底層輸出流之前會在緩衝區中累積。這個緩衝區的大小可以被指定,但是默認情況下它對於大多數目的來說足夠大。請注意,傳遞給write()方法的字符不會被緩衝。
爲了獲得最高的效率,可以考慮在BufferedWriter中封裝一個OutputStreamWriter,以避免頻繁的轉換器調用。例如:
感謝您的回覆。從OutputStreamWriter的javadoc中,「write()方法的每次調用都會導致編碼轉換器在給定字符上被調用。生成的字節在寫入底層輸出流之前會在緩衝區中累積。這個緩衝區可以被指定,但是默認情況下它對於大多數目的來說足夠大了。注意傳遞給write()方法的字符沒有被緩衝。爲了獲得最高的效率,可以考慮在BufferedWriter中包裝一個OutputStreamWriter,以避免頻繁的轉換器調用「。 OP中的整個報價編輯 – Bruce 2013-04-03 22:24:47
@Bruce:*考慮*,當然。這與推薦*不一樣。我會測試它。儘管如此,我仍然很驚訝地發現它在大多數情況下都有顯着的不同。 – 2013-04-03 22:26:10
感謝您的有用答覆。是的,我應該測試它。它實際上是我爲面試做的編程測試的一部分,我想知道那種默認的正確解決方案是什麼,或者至少有一個沒有明顯錯誤。 – Bruce 2013-04-03 22:31:19