对Java数据流的操作
类似这样的代码:
InputStream inputStream = null;
try {
inputStream =file.getInputStream();
byte[] bs = new byte[inputStream.available()];
inputStream.read(bs);
File files = new File("a.log");OutputStream outputStream = new FileOutputStream(files);
outputStream.write(bs);
outputStream.close();
肯定是能工作的。但是,把输入流全部读入内存再写入文件流的做法,是不好的。如果是单机程序或者是随手写的小应用问题不大。在服务器端,用于对上传文件的处理,则会造成内存的较大抖动。对内存的时候完全依赖用户上传文件的大小。
应该通过缓存,把上传文件消耗的内存大小锁定在固定值,这样内存是平稳的,可能会随着用户并发数的增加而扩大,但是不会因为个把大文件而造成内存的陡涨。
写了个示例:
package com.easymorse.inputstream;
import java.io.FileOutputStream;
import java.io.InputStream;public class InputStreamDemo {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
InputStream inputStream = InputStreamDemo.class
.getResourceAsStream("p.png");// 模拟得到一个输入流
int bufferSize = 1024;//缓存大小
byte[] data = new byte[bufferSize];
FileOutputStream outputStream = new FileOutputStream("cp.png");
for (int i = inputStream.read(data); i > 0; i = inputStream.read(data)) {
outputStream.write(data, 0, i);
}
outputStream.close();
inputStream.close();
}}
源代码见:
这篇文章上的评论的 RSS feed TrackBack URI