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