On Fri, 27 Jun 2025 16:48:40 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.

src/java.base/share/classes/java/io/BufferedWriter.java line 244:

> 242:     }
> 243: 
> 244:     private static abstract sealed class BufferedImpl permits 
> WriterImpl, OutputStreamWriterImpl {

No need to explicitly list the permitted subclasses when in the same 
compilation unit:
Suggestion:

    private static abstract sealed class BufferedImpl {

src/java.base/share/classes/java/io/BufferedWriter.java line 468:

> 466:         }
> 467: 
> 468:         public void close() throws IOException {

These implement the package‑private methods from `BufferedImpl`, so they 
probably should have `@Override` and don’t need to be `public`:
Suggestion:

        @Override
        void flushBuffer() throws IOException {
            os.flushBuffer();
        }

        @Override
        void write(int c) throws IOException {
            os.write(new char[] {(char) c});
        }

        @Override
        void write(char[] cbuf, int off, int len) throws IOException {
            os.write(cbuf, off, len);
        }

        @Override
        void write(String s, int off, int len) throws IOException {
            os.write(s, off, len);
        }

        @Override
        void flush() throws IOException {
            os.flush();
        }

        @Override
        void close() throws IOException {


Same applies to the regular `WriterImpl`.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/26022#discussion_r2173989119
PR Review Comment: https://git.openjdk.org/jdk/pull/26022#discussion_r2173990102

Reply via email to