如何访问 BufferedWriter 中的缓冲区

How to get acess to buffer in BufferedWriter

我正在使用 BufferedWriter 在 java 中写入一个文件。这是我的代码 -

public static void main(String[] args) {
    try(BufferedWriter writer = Files.newBufferedWriter(filePath, Charset.forName("CP1252"))) {
        while (thereIsContentToWrite){
            writer.write(content);
        }
    }catch (CharacterCodingException ce){
        //get content of writer's current buffer (java.io.BufferedWriter.cb)
    }catch (IOException e) {
        e.printStackTrace();
    }
}

我想报告 writer 当前缓冲区的内容,因为它包含 cp1252 中的 "Unmappable character"。 目前,我们正在尝试维护另一个缓冲区来保存内容,但我想知道是否有更好的方法来实现相同的目的。

如果我没理解错的话,你要报告BufferedWriter缓冲区的内容。您可以使用 Reflection API.

以下代码应检索缓冲区内容:

// BufferedWriter buffer is the private field "cb"
Field bufferField = writer.getClass().getDeclaredField("cb");
// We make this field accessible so we can retrieve its contents
bufferField .setAccessible(true);
// We can now get the data
char[] buffer = (char[]) bufferField.get(writer);

您可以编写一个类似于 BufferedWriterCustomBufferedWriter,并在您的实现中为 cb 添加一个 getter。