Eliminate unnecessary buffering and encoding conversion in BufferedWriter
Brett Okken
brett.okken.os at gmail.com
Mon Jun 30 03:36:36 UTC 2025
Is StreamEncoder buffering content to only write to the underlying
OutputStream when some threshold is hit? While the layers of conversions
are unfortunate, it seems there could be negative performance implications
of having many extremely small writes (such as 1 character/byte) at a time
to the underlying OutputStream.
Presumably this is a common pattern, as it is recommended:
https://github.com/openjdk/jdk/blob/4dd1b3a6100f9e379c7cee3c699d63d0d01144a7/src/java.base/share/classes/java/io/OutputStreamWriter.java#L45
On Sun, Jun 29, 2025 at 11:04 AM wenshao <shaojin.wensj at alibaba-inc.com>
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.
>
> -
> Shaojin Wen
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/core-libs-dev/attachments/20250629/56504f9b/attachment-0001.htm>
More information about the core-libs-dev
mailing list