BufferedReader到BufferedWriter

时间:2011-08-17 08:36:58

标签: java bufferedreader bufferedwriter

如何从BufferedWriter获取BufferedReader

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

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

5 个答案:

答案 0 :(得分:10)

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

IOUtils.copy(reader, writer);

网站here

答案 1 :(得分: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);
      }
  }

有关The Really big Index

上的输入和输出的更多信息

答案 2 :(得分:1)

JAVA 9更新

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

public long transferTo(Writer out)  throws IOException

正如文档所述,transferTo将:

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

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

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

reader.transferTo(writer);

答案 3 :(得分:0)

BufferedWriter构造函数是不是为了接受读者而重载了吗? Buhb说的是正确的。

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

IOUtils.copy(new InputStreamReader(new FileInputStream("filename_toread")), writer);
writer.flush();
writer.close();

答案 4 :(得分:0)

您可以使用管道读/写器(link)。这正是他们的设计目标。不确定你是否可以将它们转移到你已经通过的现有缓冲读卡器上。你必须故意自己构建buf阅读器。