gpt4 book ai didi

java - 如何将 BufferedWriter 转换为 BufferedReader

转载 作者:行者123 更新时间:2023-12-01 23:05:33 25 4
gpt4 key购买 nike

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

那么有人可以告诉我如何进行转换吗?无论如何,我使用 PDFBox 库将多个(可能很多)PDF 文件转换为原始文本。 PDFBox API 将内容放入 Writer 中,之后我需要获取内容以进行进一步处理(因此 BufferedReader/Writer 实际上并不是必需的,而是某种读取器/写入器)。我知道可以使用 StringReader/Writer 实现这一点,但我不确定这是否有效,而且我失去了 readline() 方法。

最佳答案

这有点像问如何将 pig 变成大象......:-)

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

  • 您可以捕获写入缓冲写入器的数据,以便随后可以使用缓冲读取器读取该数据。基本上,您可以通过以下方式执行此操作:

    1. 使用 BufferedWriter 写入 StringWriter 或 CharArrayWriter,

    2. 关闭它,

    3. 从 SW/CAW 中提取结果作为字符串,并且

    4. 将字符串包装在 StringReader 中,

    5. 将 StringReader 包装在 BufferedReader 中。

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

这两种方法都有缺点:

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

  • 第二个要求您在单独的线程中生产和消费......否则就有管道永久阻塞的风险。

<小时/>

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

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

关于java - 如何将 BufferedWriter 转换为 BufferedReader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22830958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com