黑马程序员技术交流社区
标题:
FileOutputStream自定义数组拷贝和ByteArrayOutputStream拷贝哪个更快?
[打印本页]
作者:
赵茹艳
时间:
2012-5-15 12:22
标题:
FileOutputStream自定义数组拷贝和ByteArrayOutputStream拷贝哪个更快?
用自定义数组拷贝一个文件。
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("004.jpg");
FileOutputStream fos = new FileOutputStream("dest.jpg");
byte[] buffer = new byte[1024]; // 定义byte[]用来存储数据
int len; // 定义int变量用来记住有效数据的个数
while ((len = fis.read(buffer)) != -1) // 一次读取buffer.length个数据, 将数据存在buffer中, len记住个数. 如果没遇到文件末尾, 进入循环
fos.write(buffer, 0, len); // 将数组中的数据从0号索引开始, 写出len个
fis.close();
fos.close();
}
用ByteArrayOutputStream拷贝一个文件
private static void demo4() throws FileNotFoundException, IOException {
FileInputStream fis = new FileInputStream("004.jpg");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1)
baos.write(buffer, 0, len); // 将文件中的所有数据都写到内存中
fis.close();
baos.close();
byte[] data = baos.toByteArray(); // 获取文件数据
FileOutputStream fos = new FileOutputStream("dest2.jpg");
fos.write(data); // 一次性写出所有数据
fos.close();
}
这两种方法哪个快,为什么啊?以后工作中哪个更常用?
作者:
云惟桉
时间:
2012-5-15 22:59
while ((len = fis.read(buffer)) != -1)
baos.write(buffer, 0, len); // 将文件中的所有数据都写到内存中
fis.close();
baos.close();
byte[] data = baos.toByteArray(); // 获取文件数据
FileOutputStream fos = new FileOutputStream("dest2.jpg");
fos.write(data); // 一次性写出所有数据
fos.close();
ByteArrayOutputStream这个流没有用过因此不是很了解,但是我有问题就是:
楼主用baos.close关闭该流以后,还可以使用 byte[] data = baos.toByteArray();
把数据转到字节数组里面去吗?这样不会报错吗?
按理来说关流以后就不能对流进行操作了才对吧
作者:
刘_浩
时间:
2012-5-15 23:04
这个问题可以这样做,前后各写一个System.currentTimeMillis() ;相减就行了。
作者:
Fc10232
时间:
2012-5-15 23:38
{:soso_e179:}
作者:
王杰
时间:
2012-5-16 08:20
这个到底用哪个,主要看你的目的是什么,如果是硬盘就用FileOutputStream,如果是内存就用ByteArrayOutputStream,如果是控制台就是System.out。。。
如果考虑到性能的问题,那么你可以使用缓冲区Buffered。将你的输入流和输出流装饰一下就行了。
作者:
永恒之翼网络
时间:
2012-5-16 09:39
就楼主这道题来说,应该是第一种块一些。原因有一下几方面:
一、流操作的对象是“004.jpg”,是硬盘上的,不是内存上的,字节流比字节数组流有优势。
二、第一种用了一个缓冲,而第二种用了三个缓冲。这样同样的数据,第二种操作时,所花的步骤多,因此,所花的时间多。
三、第二种比第一种多用了一个字节数组流,这样使得对同一数据操作时,第二种所花的步骤多,因此,所花的时间多。
上个图:
流的使用.jpg
(178.7 KB, 下载次数: 94)
下载附件
2012-5-16 09:38 上传
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2