如何在BufferedWriter中访问缓冲区

问题描述 投票:2回答:2

我正在使用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();
    }
}

我想报告当前写入缓冲区的内容,因为它包含根据cp1252的“不可映射字符”。目前,我们正在尝试维护另一个缓冲区来保存内容,但我想知道是否有更好的方法来实现相同的目标。

java character-encoding bufferedwriter
2个回答
1
投票

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


1
投票

如果我理解正确,您想要报告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);
© www.soinside.com 2019 - 2024. All rights reserved.