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