BufferedInputStream不行了头大了,老鸟们救命啊!
下面这段是书里想要证明BufferedInputStream类是自带缓冲区的代码(代码内容是把一个文件里的内容复制到另一个文件里),小弟是自学的所以看了以后有些地方百思不得其解,查来查去头都楞了特请各位老手帮忙解惑。
package onlyfun.caterpillar;
import java.io.*;
public class BufferedStreamDemo {
public static void main(String[] args) {
try {
byte[] data = new byte[1];
File srcFile = new File(args[0]);
File desFile = new File(args[1]);
BufferedInputStream bufferedInputStream =
new BufferedInputStream(
new FileInputStream(srcFile));
BufferedOutputStream bufferedOutputStream =
new BufferedOutputStream(
new FileOutputStream(desFile));
System.out.println("复制文件:" +
srcFile.length() + "字节");
while(bufferedInputStream.read(data) != -1) {
bufferedOutputStream.write(data);
}
// 将缓冲区中的数据全部写出
bufferedOutputStream.flush();
// 关闭流
bufferedInputStream.close();
bufferedOutputStream.close();
System.out.println("复制完成");
}
catch(ArrayIndexOutOfBoundsException e) {
System.out.println(
"using: java UseFileStream src des");
e.printStackTrace();
}
catch(IOException e) {
e.printStackTrace();
}
}
}
提问:(1)实例化子类对象时,可以把父类对象作为参数传入其中吗?
例如:BufferedInputStream类是继承至FileInputStream类的,但是上述代码中在构建子类对象buffIn时
却把FileInputStream的对象,作为参数传入了其中!请解释。
(2) byte[] data = new byte[1];
....
while(bufferedInputStream.read(data) != -1) {
bufferedOutputStream.write(data);
}
这两句是什么意思?data是外部的另申请的缓冲区吗?他的存在是为了证明:整个过程中起到缓冲作用的的是
BufferedInputStream内部自带的缓冲区而不是外部申请的data,对吗?