2

我怎样才能BufferedWriter从 a 中获得 a BufferedReader

我希望能够做这样的事情:

BufferedReader read  = new BufferedReader(new InputStreamReader(...));
BufferedWriter write = new BufferedWriter(read);
4

5 回答 5

8

您可以使用 Apache commons io 中的以下内容:

IOUtils.copy(reader, writer);

网站在这里

于 2011-08-17T08:40:12.170 回答
2

JAVA 9 更新

从 Java 9 开始,Reader 提供了一个名为 transferTo 的方法,其签名如下:

public long transferTo(Writer out)  throws IOException

正如文档所述, transferTo 将:

从该读取器读取所有字符,并按照读取顺序将字符写入给定写入器。返回时,此阅读器将位于流的末尾。此方法不会关闭读取器或写入器。此方法可能会无限期地阻止从读取器读取或写入写入器。读取器和/或写入器异步关闭或传输期间线程中断的情况的行为是高度特定于读取器和写入器的,因此未指定。

如果从读取器读取或写入写入器发生 I/O 错误,则可能在读取或写入某些字符后发生。因此,阅读器可能不在流的末尾,并且一个或两个流可能处于不一致的状态。如果发生 I/O 错误,强烈建议立即关闭两个流。

因此,为了将 Java Reader 的内容写入 Writer,您可以编写:

reader.transferTo(writer);
于 2018-05-17T14:56:28.597 回答
1

如果你想知道会发生什么:

来自阅读器的所有输入都被复制到输入流

也有类似的东西:

 private final void copyInputStream( InputStreamReader in, OutputStreamWriter out )      throws IOException
  {
    char[] buffer=new char[1024];
    int len;
    while ( ( len=in.read(buffer) ) >= 0 )
      {
      out.write(buffer, 0, len);
      }
  }

更多关于真正大索引的输入和输出

于 2011-08-17T09:12:41.487 回答
0

您可以使用管道读/写器(链接)。这正是它们的设计目的。不确定您是否可以将它们重新配置到您通过的现有缓冲阅读器上。您必须自己围绕它构建 buf 阅读器。

于 2012-01-06T17:51:48.340 回答
0

BufferedWriter 构造函数没有为接受读者重载,对吗?布赫说的是对的。

BufferedWriter  writer = new BufferedWriter(
new FileWriter("filename_towrite"));    

IOUtils.copy(new InputStreamReader(new FileInputStream("filename_toread")), writer);
writer.flush();
writer.close();
于 2011-08-17T10:13:28.290 回答