什么是将FileOutputStream转换为FileInputStream的最简单方法(提供一段代码)?
这可能会对您有所帮助:
http://ostermiller.org/convert_java_outputstream_inputstream.html
该文章提到了三种可能性:
仅供参考,以相反的方式进行(从输入到输出):
使用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;
}
FileInputStream
有一个接受 FileDescriptor
的构造函数的事实。 - Mark Peters如果您想在写入后读取内容(而无需刷新到磁盘),请使用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
如果您能使用 @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)
FileOutputStream
中读取你正在写入的文件吗? - Mark Peters((FileInputStream)yourFileOutputStream)
,那应该就是答案了。 - Andrey Agibalov