繁体   English   中英

FileOutputStream 转换为 FileInputStream

[英]FileOutputStream into FileInputStream

将 FileOutputStream 转换为 FileInputStream 的最简单方法是什么(一段代码会很棒)?

这可能会帮助您:

http://ostermiller.org/convert_java_outputstream_inputstream.html

这篇文章提到了3种可能性:

  • 将完整的输出写入字节数组,然后再次读取
  • 使用管道
  • 使用循环字节缓冲区(该页面上托管的库的一部分)


仅供参考,反过来做(输入到输出):

使用 Apache Commons IO 的简单解决方案是:

IOUtils.copyLarge(InputStream, OutputStream)

或者如果您只想复制文件:

FileUtils.copyFile(inFile,outFile);

如果你不想使用 Apache Commons IO,下面是copyLarge方法的作用:

public static long copyLarge(InputStream input, OutputStream output) throws IOException 
{
  byte[] buffer = new byte[4096];
  long count = 0L;
  int n = 0;
  while (-1 != (n = input.read(buffer))) {
   output.write(buffer, 0, n);
   count += n;
  }
  return count;
}

我收到一个 FileOutputStream。 我想要的是阅读它。

您当然无法从OutputStream中读取。 我认为您的意思是要从FileOutputStream写入的文件中读取。 我认为你也做不到。 FileOutputStream似乎没有保留对正在写入的文件的引用。

您需要做的是发现什么File或路径(一个String )被传递到FileOutputStream并使用相同的FileString创建一个新的FileInputStream

如果您的意思是希望在写入后能够读取内容(无需刷新到磁盘),请使用 ByteArrayOutputStream 和 ByteArrayInputStream。 完成对 ByteArrayOutputStream 的写入后,您可以获取底层字节数据并使用 ByteArrayInputStream 将其读回。

ByteArrayOutputStream outStream = new ByteArrayOutputStream();
// do any output onto outStream you need
ByteArrayInputStream inStream = new ByteArrayInputStream(outStream.toByteArray());
// you can read back the output with inStream now

如果你想要一个缓冲区(生产者/消费者类型问题),请查看 java 的 nio 包提供的缓冲区。

你想要的是一个 RandomAccessFile。 这与 FileInputStream 和 FileOutputStream 具有相同的基本方法。 我知道,你可能没有得到那个。

如果您可以使用给出的@Thomas 示例,否则您可以执行以下操作:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class FileInputOutputExample {
  public static void main(String[] args) throws Exception {

    InputStream is = new FileInputStream("in.txt");
    OutputStream os = new FileOutputStream("out.txt");
    int c;
    while ((c = is.read()) != -1) {
      System.out.print((char) c);
      os.write(c);
    }
    is.close();
    os.close();

  }
}

来自 java2s.com 的示例

编辑:

由于@Thomas 删除了他的答案,我将添加 Commons IO 方法来处理这个问题以供参考:

IOUtils.copy(InputStream is, OutputStream os)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM