[英]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
并使用相同的File
或String
创建一个新的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.