RFR: 8361018: Re-examine buffering and encoding conversion in BufferedWriter [v6]
Chen Liang
liach at openjdk.org
Tue Jul 1 02:35:41 UTC 2025
On Tue, 1 Jul 2025 00:01:21 GMT, Shaojin Wen <swen at openjdk.org> 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. 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.
>>
>> LATIN1 -> UTF16 -> UTF8
>>
>> 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 has updated the pull request incrementally with one additional commit since the last revision:
>
> Revert "BufferedWriter buffer use StringBuilder"
>
> This reverts commit da902ca0b0bd6acc003deb8ad1ca0d6485a29a27.
I think we can split this into two parts:
1. Update buffering strategy for BufferedWriter when backing writer is an OutputStreamWriter
2. Use an alternative StreamDecoder impl if the CharsetDecoder is an ArrayDecoder
This should make the whole thing more clear.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/26022#issuecomment-3021520629
More information about the nio-dev
mailing list