2017-12-27 277 views
2

我正在用BufferedWriter在java中编写一个文件。这里是我的代码 -如何在BufferedWriter中获取缓冲区

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就报出作家的当前缓冲区的内容。 目前,我们正在努力维持另一个缓冲区来保存内容,但是我想知道是否有更好的方法来实现这一目标。

+1

你不能从你正在编写的'内容'中获得内容。 – eatSleepCode

+0

@eatSleepCode我正在提到的内容保存在另一个缓冲区。但这是一个开销。 –

回答

1

你可以写一个CustomBufferedWriter它类似于BufferedWriter并在实施添加一个getter方法cb

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); 
+0

是的,这是肯定的方法之一!感谢回复。但是,对其他API使用反射有点棘手。 –