谁能掰开了,揉碎了,解读一下BufferedInputStream和BufferedOutputStream的源代码,为什么要来这一个类?黑马程序员培训营毕向东老师讲到这时,没有具体讲到它怎么就提高效率了。
package com.itheima.io.copy;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyTextBufTest {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// 以源文件作为参数,建立文件字节输入流对象
FileInputStream fis = new FileInputStream(
"I:\\20151002锵锵三人行 作家的钱是那里来的【华夏视讯网首发hxsxw.com】【迅雷+百度云下载】.rmvb");
// 建立文件字节输入流中转站对象
BufferedInputStream bufis = new BufferedInputStream(fis);
// 以目标文件作为参数,建立文件字节输出流对象
FileOutputStream fos = new FileOutputStream(
"G:\\20151002锵锵三人行 作家的钱是那里来的.rmvb");
// 建立文件字节输出流中转站对象
BufferedOutputStream bufos = new BufferedOutputStream(fos);
// “读取”“写入”文件第一种方式
// 定义存储单个字节的变量
// int single_byte=0;
// 调用文件字节输入流中转站对象“读取”功能
// while((single_byte=bufis.read())!=-1){
// 调用文件字节输出流中转站对象“写入”功能
// bufos.write(single_byte);
// }
// “读取”“写入”文件第二种方式
// 定义一个字节数组
byte[] buf = new byte[1024];
// 定义一个记录获取了多少个字节的变量
int len = 0;
// 调用文件字节输入流中转站对象“读取”功能
while ((len = bufis.read(buf)) != -1) {
// 调用文件字节输出流中转站对象“写入”功能
bufos.write(buf, 0, len);
}
}
}
这个是毕老师的代码(思路是这样的,代码不完全一样),看了几遍,唯有一个感受,绕来绕去,有这个必要吗?
老是说着“提高效率”“提高效率”,可是不知道为什么总有一种感觉,就是这和我没关系!也是,我从没有直观地感受到所谓的“提高效率”!
------解决思路----------------------
没发现。
毕向东的视频我看过。前几部分讲得不错。后面的觉得不是很好(个人感觉自接口开始吧,到了网络部分开始我就没看)。缺乏一些面向应用的讲解,使得java各种特性的优势让人难于体会,如果有所改进的话就好了。这两天看了head first 设计模式,我才对接口的优势得以体会。不过考虑是种培训视频,也没啥好抱怨的。看了他视频开始自学java,我应该还欠老毕钱。让他知道跟我漫天开口可不好。

毕向东讲BufferedInputStream的效率提高时,好像完全没提,硬盘的缓冲及操作系统的缓冲的作用,因此对什么效率提高确实不好理解。
linux系统好像有种文件映射到内存的机制(好像有点类似把文件当做虚拟内存的一部分,通过内存管理向请求的程序内存空间映射),没看过源码,不知道具体情况。多年前看的了。windows完全没看过具体实现的细节。
因为系统和硬盘缓存对硬盘访问的优化,一般学习时写的小程序应该很难感觉到什么效率提高。不过最差情况,应该不会造成性能降低才对。然而考虑到java的跨平台性,应该在有些平台可能小程序就会很明显。