我想问一下通过下面两句流的操作是不是就将helloworld.java中的内容读到BufferedInputStream的缓冲区呢

来源:百度知道 编辑:UC知道 时间:2024/05/15 19:54:41
FileInputStream fis = new FileInputStream("d:\\share\\java\\HelloWorld.java");
BufferedInputStream bis =
new BufferedInputStream(fis);

后来的操作好像是通过缓冲区来的是吗

Java中的流就相当于管道。
FileInputStream fis = new FileInputStream("d:\\share\\java\\HelloWorld.java");
这就相当于把一根类型为FileInputStream的水管,接到HelloWorld.java这个水桶上。
BufferedInputStream bis = new BufferedInputStream(fis);
就相当于在原本类型为FileInputStream的水管外面,再接一根类型为BufferedInputStream的水管。
接下来直接通过外面这跟水管就可以取到水了。

这个实现用到了面向对象设计模式中的Decorator模式,是为了在运行时可以动态地添加新的行为。
像你这个例子,原本的fis是没有缓冲功能的,每次read都会直接去从文件中读,这样速度慢而且对硬盘也不好。而在外面套了一层BufferedInputStream以后呢,当首次调用read的时候,它会先一次性从文件中读取若干字节的内容,存在内存里,这样下次再调用read就可以直接从内存里读数据了,这样速度会比较快。
也就是,在运行时,为原来的对象(fis)动态地添加了新的功能(缓冲的功能)。

应该是,你写的不太清楚。