Eliminate unnecessary buffering and encoding conversion in BufferedWriter

Alan Bateman alan.bateman at oracle.com
Mon Jun 30 05:38:43 UTC 2025



On 29/06/2025 17:03, wenshao wrote:
> 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.
>
I see you've already proposed a PR. Most of this code goes back to JDK 
1.4 so we need to be very careful, any changes will require a lot of 
Reviewer cycles.

Have you surveyed the tests to ensure that there are good tests with 
different charsets and usage patterns? I think we need to be confidence 
in the tests before touching anything.

-Alan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/core-libs-dev/attachments/20250630/908d5eae/attachment-0001.htm>


More information about the core-libs-dev mailing list