经过测试,若逐字节读写,一个4M的图片,用缓冲区的速度是不用缓冲区的几十倍。然而,用数组转存的情况下,二者速度相当。
所以说,既然不用缓冲类、用数组转存数据
(new FileInputStream("...")).read(byteArr);
(new FileOutputStream("...")).write(byteArr,0,len);
效率和用缓冲类、用数组转存数据
(new BufferedInputStream(new FileInputStream("..."))).read(byteArr);
(new BufferedOutputStream(new FileOutputStream("..."))).write(byteArr,0,len);
相当,那么,用缓冲类又有什么好处呢?
14 个解决方案
#1
inputstream 类都以字节传输,开一次车拉一个字节给你,,速度比较慢。缓冲流好比开一个车每次拉一堆字节,然后一个一个拿给你,所以效率会高一些
#2
这个我是知道的,麻烦看下问题描述,别只看标题啊。。
InputStream类用字符数组读写的时候,也是一样的一次一堆字节
#3
缓冲到一个临时的缓冲内存里面,再读入的时候就会很快
#4
可是这个快也只是相对于InputStream类单字节读入的吧。。像我说的那样,都用字节数组读入的话,速度好像没什么区别。。
也可能是文件太小了,我用一个视频试一下
#5
读取文件的原始字节是很耗时的,比如BufferedInputStream 有一个两兆的缓冲内存,那么在程序读着两兆字节期间就不会再去原文件里获取原始字节了。BufferedInputStream 默认的内存大小是8192 bytes.
#6
缓冲到一个临时的缓冲内存里面,再读入的时候就会很快
我刚刚又测试了一下,将一个150M的视频复制
用FileInputStream类和FileOutputStream类,用byte[1024*1024]进行读写,只需要80ms左右
用BufferedInputStream类和BufferedOutputStream类,也是用byte[1024*1024]进行读写,要花380ms左右。。
用缓冲区类反而更慢???
#7
缓冲到一个临时的缓冲内存里面,再读入的时候就会很快
我刚刚又测试了一下,将一个150M的视频复制
用FileInputStream类和FileOutputStream类,用byte[1024*1024]进行读写,只需要80ms左右
用BufferedInputStream类和BufferedOutputStream类,也是用byte[1024*1024]进行读写,要花380ms左右。。
用缓冲区类反而更慢???
你的测试环境都不一样,跑两个程序的时候,CPU, 内存是使用率是不是一样?这么测试得出的结论不科学
#8
缓冲到一个临时的缓冲内存里面,再读入的时候就会很快
我刚刚又测试了一下,将一个150M的视频复制
用FileInputStream类和FileOutputStream类,用byte[1024*1024]进行读写,只需要80ms左右
用BufferedInputStream类和BufferedOutputStream类,也是用byte[1024*1024]进行读写,要花380ms左右。。
用缓冲区类反而更慢???
啊 不好意思。。刚刚多注释了一行。。改了之后发现两种方法都是380ms左右,还是没什么区别。。
#9
缓冲到一个临时的缓冲内存里面,再读入的时候就会很快
我刚刚又测试了一下,将一个150M的视频复制
用FileInputStream类和FileOutputStream类,用byte[1024*1024]进行读写,只需要80ms左右
用BufferedInputStream类和BufferedOutputStream类,也是用byte[1024*1024]进行读写,要花380ms左右。。
用缓冲区类反而更慢???
你的测试环境都不一样,跑两个程序的时候,CPU, 内存是使用率是不是一样?这么测试得出的结论不科学
刚刚不小心多注释了一行所以弄错了。。又重新试了下两种方法都是380ms左右,因为是反复运行多次得出的平均值,所以还是比较可信的吧。。
#10
缓冲到一个临时的缓冲内存里面,再读入的时候就会很快
我刚刚又测试了一下,将一个150M的视频复制
用FileInputStream类和FileOutputStream类,用byte[1024*1024]进行读写,只需要80ms左右
用BufferedInputStream类和BufferedOutputStream类,也是用byte[1024*1024]进行读写,要花380ms左右。。
用缓冲区类反而更慢???
你的测试环境都不一样,跑两个程序的时候,CPU, 内存是使用率是不是一样?这么测试得出的结论不科学
刚刚不小心多注释了一行所以弄错了。。又重新试了下两种方法都是380ms左右,因为是反复运行多次得出的平均值,所以还是比较可信的吧。。
可以用 int read(byte[]) 测试一下
#11
因为类比较高大上 你把代码贴出来看看..
#12
你也是个纠结蛋疼的人
#13
缓冲到一个临时的缓冲内存里面,再读入的时候就会很快
我刚刚又测试了一下,将一个150M的视频复制
用FileInputStream类和FileOutputStream类,用byte[1024*1024]进行读写,只需要80ms左右
用BufferedInputStream类和BufferedOutputStream类,也是用byte[1024*1024]进行读写,要花380ms左右。。
用缓冲区类反而更慢???
你的测试环境都不一样,跑两个程序的时候,CPU, 内存是使用率是不是一样?这么测试得出的结论不科学
刚刚不小心多注释了一行所以弄错了。。又重新试了下两种方法都是380ms左右,因为是反复运行多次得出的平均值,所以还是比较可信的吧。。
//创建一个缓冲区
byte buffer[] = new byte[1024];
//判断输入流中的数据是否已经读完的标识
int len = 0;
//循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
while((len=in.read(buffer))>0){
out.write(buffer, 0, len);
}
#14
大数据用缓冲流,小的可以不需要用缓冲流想当与中转站一样,等资源积累到一定的额度在一起读写,省资源吧
#1
inputstream 类都以字节传输,开一次车拉一个字节给你,,速度比较慢。缓冲流好比开一个车每次拉一堆字节,然后一个一个拿给你,所以效率会高一些
#2
inputstream 类都以字节传输,开一次车拉一个字节给你,,速度比较慢。缓冲流好比开一个车每次拉一堆字节,然后一个一个拿给你,所以效率会高一些
这个我是知道的,麻烦看下问题描述,别只看标题啊。。
InputStream类用字符数组读写的时候,也是一样的一次一堆字节
#3
缓冲到一个临时的缓冲内存里面,再读入的时候就会很快
#4
缓冲到一个临时的缓冲内存里面,再读入的时候就会很快
可是这个快也只是相对于InputStream类单字节读入的吧。。像我说的那样,都用字节数组读入的话,速度好像没什么区别。。
也可能是文件太小了,我用一个视频试一下
#5
缓冲到一个临时的缓冲内存里面,再读入的时候就会很快
可是这个快也只是相对于InputStream类单字节读入的吧。。像我说的那样,都用字节数组读入的话,速度好像没什么区别。。
也可能是文件太小了,我用一个视频试一下
读取文件的原始字节是很耗时的,比如BufferedInputStream 有一个两兆的缓冲内存,那么在程序读着两兆字节期间就不会再去原文件里获取原始字节了。BufferedInputStream 默认的内存大小是8192 bytes.
#6
缓冲到一个临时的缓冲内存里面,再读入的时候就会很快
我刚刚又测试了一下,将一个150M的视频复制
用FileInputStream类和FileOutputStream类,用byte[1024*1024]进行读写,只需要80ms左右
用BufferedInputStream类和BufferedOutputStream类,也是用byte[1024*1024]进行读写,要花380ms左右。。
用缓冲区类反而更慢???
#7
缓冲到一个临时的缓冲内存里面,再读入的时候就会很快
我刚刚又测试了一下,将一个150M的视频复制
用FileInputStream类和FileOutputStream类,用byte[1024*1024]进行读写,只需要80ms左右
用BufferedInputStream类和BufferedOutputStream类,也是用byte[1024*1024]进行读写,要花380ms左右。。
用缓冲区类反而更慢???
你的测试环境都不一样,跑两个程序的时候,CPU, 内存是使用率是不是一样?这么测试得出的结论不科学
#8
缓冲到一个临时的缓冲内存里面,再读入的时候就会很快
我刚刚又测试了一下,将一个150M的视频复制
用FileInputStream类和FileOutputStream类,用byte[1024*1024]进行读写,只需要80ms左右
用BufferedInputStream类和BufferedOutputStream类,也是用byte[1024*1024]进行读写,要花380ms左右。。
用缓冲区类反而更慢???
啊 不好意思。。刚刚多注释了一行。。改了之后发现两种方法都是380ms左右,还是没什么区别。。
#9
缓冲到一个临时的缓冲内存里面,再读入的时候就会很快
我刚刚又测试了一下,将一个150M的视频复制
用FileInputStream类和FileOutputStream类,用byte[1024*1024]进行读写,只需要80ms左右
用BufferedInputStream类和BufferedOutputStream类,也是用byte[1024*1024]进行读写,要花380ms左右。。
用缓冲区类反而更慢???
你的测试环境都不一样,跑两个程序的时候,CPU, 内存是使用率是不是一样?这么测试得出的结论不科学
刚刚不小心多注释了一行所以弄错了。。又重新试了下两种方法都是380ms左右,因为是反复运行多次得出的平均值,所以还是比较可信的吧。。
#10
缓冲到一个临时的缓冲内存里面,再读入的时候就会很快
我刚刚又测试了一下,将一个150M的视频复制
用FileInputStream类和FileOutputStream类,用byte[1024*1024]进行读写,只需要80ms左右
用BufferedInputStream类和BufferedOutputStream类,也是用byte[1024*1024]进行读写,要花380ms左右。。
用缓冲区类反而更慢???
你的测试环境都不一样,跑两个程序的时候,CPU, 内存是使用率是不是一样?这么测试得出的结论不科学
刚刚不小心多注释了一行所以弄错了。。又重新试了下两种方法都是380ms左右,因为是反复运行多次得出的平均值,所以还是比较可信的吧。。
可以用 int read(byte[]) 测试一下
#11
因为类比较高大上 你把代码贴出来看看..
#12
你也是个纠结蛋疼的人
#13
缓冲到一个临时的缓冲内存里面,再读入的时候就会很快
我刚刚又测试了一下,将一个150M的视频复制
用FileInputStream类和FileOutputStream类,用byte[1024*1024]进行读写,只需要80ms左右
用BufferedInputStream类和BufferedOutputStream类,也是用byte[1024*1024]进行读写,要花380ms左右。。
用缓冲区类反而更慢???
你的测试环境都不一样,跑两个程序的时候,CPU, 内存是使用率是不是一样?这么测试得出的结论不科学
刚刚不小心多注释了一行所以弄错了。。又重新试了下两种方法都是380ms左右,因为是反复运行多次得出的平均值,所以还是比较可信的吧。。
//创建一个缓冲区
byte buffer[] = new byte[1024];
//判断输入流中的数据是否已经读完的标识
int len = 0;
//循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
while((len=in.read(buffer))>0){
out.write(buffer, 0, len);
}
#14
大数据用缓冲流,小的可以不需要用缓冲流想当与中转站一样,等资源积累到一定的额度在一起读写,省资源吧