Java 如何将BufferedWriter转换为BufferedReader

Java 如何将BufferedWriter转换为BufferedReader,java,bufferedreader,java-io,pdfbox,bufferedwriter,Java,Bufferedreader,Java Io,Pdfbox,Bufferedwriter,我的理解是,这是一个常见的场景,但Java没有现成的解决方案,我已经断断续续地搜索了一天多了。我尝试了Ostermiller库中的CircularCharBuffer,但它使用了某种阅读器,这种阅读器会不断等待新的输入,因此我无法获取readline()来检测内容的结尾(它会挂起) 有人能告诉我怎么做转换吗?值得一提的是,我正在使用PDFBox库将多个(可能很多)PDF文件转换为原始文本。PDFBox API将内容放入编写器,之后我需要获取内容以进行进一步处理(因此BufferedReader/

我的理解是,这是一个常见的场景,但Java没有现成的解决方案,我已经断断续续地搜索了一天多了。我尝试了Ostermiller库中的CircularCharBuffer,但它使用了某种阅读器,这种阅读器会不断等待新的输入,因此我无法获取
readline()
来检测内容的结尾(它会挂起)


有人能告诉我怎么做转换吗?值得一提的是,我正在使用PDFBox库将多个(可能很多)PDF文件转换为原始文本。PDFBox API将内容放入
编写器
,之后我需要获取内容以进行进一步处理(因此
BufferedReader/Writer
实际上不是必需的,而是某种
读写器
)。我知道使用
StringReader/Writer
可以做到这一点,但我不确定这是否有效,而且我松开了
readline()
方法。

这有点像问如何将猪变成大象……:-)

好的,有两种方法可以解决这个问题(使用Java库):

  • 您可以捕获写入缓冲写入器的数据,以便使用缓冲读取器读取。基本上,您可以通过以下方式实现:

  • 使用BufferedWriter写入StringWriter或CharArrayWriter

  • 关闭它

  • 从SW/CAW中提取作为字符串的结果内容,以及

  • 将字符串包装在StringReader中

  • 将StringReader包装在BufferedReader中

  • 您可以创建PipedReader/PipedWriter对,并分别使用BufferedReader和BufferedWriter包装它们

这两种方法都有缺点:

  • 第一个要求您在构建读取端之前完成编写。这意味着您需要空间将整个流内容保存在内存中,并且无法并行地进行生产者端和消费者端处理

  • 第二个要求您在单独的线程中生产和消费。。。或者可能导致管道永久堵塞


从概念上讲,Ostermiller库实际上是PipeReader/PipeWriter的重新实现。(他的重新实现的一些优点在Java 1.6中有讨论……它允许您指定管道的缓冲区大小。标记支持很有趣,但我可以想象一些问题,这取决于您如何使用它。)


您还可以找到一个PipedReader/PipedWriter替代品,它使用灵活的缓冲区,可以根据需要增长和收缩。(至少……这在概念上是可能的。)

这有点像问如何把猪变成大象……:-)

好的,有两种方法可以解决这个问题(使用Java库):

  • 您可以捕获写入缓冲写入器的数据,以便使用缓冲读取器读取。基本上,您可以通过以下方式实现:

  • 使用BufferedWriter写入StringWriter或CharArrayWriter

  • 关闭它

  • 从SW/CAW中提取作为字符串的结果内容,以及

  • 将字符串包装在StringReader中

  • 将StringReader包装在BufferedReader中

  • 您可以创建PipedReader/PipedWriter对,并分别使用BufferedReader和BufferedWriter包装它们

这两种方法都有缺点:

  • 第一个要求您在构建读取端之前完成编写。这意味着您需要空间将整个流内容保存在内存中,并且无法并行地进行生产者端和消费者端处理

  • 第二个要求您在单独的线程中生产和消费。。。或者可能导致管道永久堵塞


从概念上讲,Ostermiller库实际上是PipeReader/PipeWriter的重新实现。(他的重新实现的一些优点在Java 1.6中有讨论……它允许您指定管道的缓冲区大小。标记支持很有趣,但我可以想象一些问题,这取决于您如何使用它。)


您还可以找到一个PipedReader/PipedWriter替代品,它使用灵活的缓冲区,可以根据需要增长和收缩。(至少……这在概念上是可能的。)

这有点像问如何把猪变成大象……:-)

好的,有两种方法可以解决这个问题(使用Java库):

  • 您可以捕获写入缓冲写入器的数据,以便使用缓冲读取器读取。基本上,您可以通过以下方式实现:

  • 使用BufferedWriter写入StringWriter或CharArrayWriter

  • 关闭它

  • 从SW/CAW中提取作为字符串的结果内容,以及

  • 将字符串包装在StringReader中

  • 将StringReader包装在BufferedReader中

  • 您可以创建PipedReader/PipedWriter对,并分别使用BufferedReader和BufferedWriter包装它们

这两种方法都有缺点:

  • 第一个要求您在构建读取端之前完成编写。这意味着您需要空间将整个流内容保存在内存中,并且无法并行地进行生产者端和消费者端处理

  • 第二个要求您在单独的线程中生产和消费。。。或者可能导致管道永久堵塞


从概念上讲,Ostermiller库实际上是PipeReader/PipeWriter的重新实现。(他的重新实现的一些优点在Java1.6中有讨论……它允许您指定管道的缓冲区大小