关于BufferedInputStream和BufferedOutputStream的问题 内存bisjava 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 BufferedInputStream 是缓冲输入流。它继承于FilterInputStream。BufferedInputStream 的作用是为另一个输入流添加一些功能,例如,提供“缓冲功能”以及支持“()标记”和“reset()重置方法”。BufferedInputStream 本质上是通过一个内部缓冲区数组实现的。例如,在新建某输入流对应的BufferedInputStream后,当我们通过read()读取输入流的数据时,BufferedInputStream会将该输入流的数据分批的填入到缓冲区中。每当缓冲区中的数据被读完之后,输入流会再次填充数据缓冲区;如此反复,直到我们读完输入流数据位置。copy_1中的buff类似BufferedInputStream 自带的缓冲区,copy_2中buff那一句已经注释掉了,BufferedInputStream 默认的缓冲字节是8192,无论copy_1中的buff,和BufferedInputStream自带的缓冲区都是为了提高效率,至于两个的效率谁高,这个要测试才知道 可是我测试了啊,copy_1中的while循环 fos.write(buff,0,len)只要执行几十此就OK了,而copy-2中的while循环是一个字节一个字节写入的,需要几万次`````这是为什么呢?既然有了BufferedInputStream,不是应该像copy_1中的那样执行吗? copy_2 你应该看看被 BufferedInputStream 包起来的 FileInputStream 里的 read(byte b[], int off, int len) 被调用多少次 你这种大进大出,是没有区别的。而且是有点亏。BufferedInputStream是委托模式。一般是用read(byte b[], int off, int len),读一点,进行分析,再读一点。 要自己控制读取多少字节,否则可能会导致内存溢出read(byte b[], int off, int len),每次读取1024个字节,写出,然后再次读入 一个是:fos.write(buff,0,len);另一个是:bos.write(len);//文件有多字节就写多少次方法调用的不一样。1楼说的是对的无论copy_1中的buff,和BufferedInputStream自带的缓冲区都是为了提高效率我那么打印次数是不对的。具体的执行次序是:BufferedInputStream会将该输入流的数据分批的填入到缓冲区中。每当缓冲区中的数据被读完之后,输入流会再次填充数据缓冲区;如此反复,直到我们读完输入流数据位置。而FileInputStream通过使用copy_1中的buff效果是基本一样的。Thanks,各位! mybatis skserver sql 由于项目需要请教一个s2sh全站页面静态化例子,可能大家也正需要了解的 web service客户端调用出错 Map 怎么用递归的方式 进行转换 java的编译运行问题 关于SPRING STRUTS HIBER整合问题出错! weblogic上部署struts应用后MessageResources出现问题!!! Hibernate 严格 按照配置文件来 创建表 request.getRemoteAddr();为什么老是127.0.0.1? C3p0 怎么错误 啊 Hibernate删除表的时候删除了触发器怎么办? div+css+jquery
BufferedInputStream 的作用是为另一个输入流添加一些功能,例如,提供“缓冲功能”以及支持“()标记”和“reset()重置方法”。
BufferedInputStream 本质上是通过一个内部缓冲区数组实现的。例如,在新建某输入流对应的BufferedInputStream后,当我们通过read()读取输入流的数据时,BufferedInputStream会将该输入流的数据分批的填入到缓冲区中。每当缓冲区中的数据被读完之后,输入流会再次填充数据缓冲区;如此反复,直到我们读完输入流数据位置。copy_1中的buff类似BufferedInputStream 自带的缓冲区,copy_2中buff那一句已经注释掉了,BufferedInputStream 默认的缓冲字节是8192,无论copy_1中的buff,和BufferedInputStream自带的缓冲区都是为了提高效率,至于两个的效率谁高,这个要测试才知道
BufferedInputStream是委托模式。一般是用read(byte b[], int off, int len),读一点,进行分析,再读一点。
另一个是:bos.write(len);//文件有多字节就写多少次
方法调用的不一样。
1楼说的是对的
无论copy_1中的buff,和BufferedInputStream自带的缓冲区都是为了提高效率
我那么打印次数是不对的。
具体的执行次序是:
BufferedInputStream会将该输入流的数据分批的填入到缓冲区中。每当缓冲区中的数据被读完之后,输入流会再次填充数据缓冲区;如此反复,直到我们读完输入流数据位置。
而FileInputStream通过使用copy_1中的buff效果是基本一样的。
Thanks,各位!