On Tue, 1 Jul 2025 00:01:21 GMT, Shaojin Wen <s...@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.

While I understand the motivation behind the PR, it's a bit challenging (as a 
reviewer) to agree a change that is essentially to 'break' the abstraction 
layer by surfacing a lower-level implementation to the top API solely for 
performance gains. 

It might be better to separate the 'backdoor UTF-8 path' optimization and the 
'skip BufferedWriter' change as a first step to start the discussion?

-------------

PR Comment: https://git.openjdk.org/jdk/pull/26022#issuecomment-3021289241

Reply via email to