BufferedWriter -> OutputStreamWriter -> StreamEncoder
In this call chain, BufferedWriter has a char[] buffer, and StreamEncoder has a 
ByteBuffer. There are two layers of cache here, or the BufferedWriter layer can 
be removed. 
LATIN1 (byte[]) -> UTF16 (char[]) -> UTF8 (byte[])
And when charset is UTF8, if the content of write(String) is LATIN1, a 
conversion from LATIN1 to UTF16 and then to LATIN1 will occur here.
We can improve BufferedWriter. When the parameter Writer instanceof 
OutputStreamWriter is passed in, remove the cache and call it directly. In 
addition, improve write(String) in StreamEncoder to avoid unnecessary encoding 
conversion.
-
Shaojin Wen

Reply via email to