FileInputStream是字节流,BufferedInputStream是字节缓冲流
FileInputStream在读取流的时候,一次读取一个字节,即每一次读取都会是一次磁盘I/O操作
package demo;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class Demo02 {
public static void main(String[] args) {
try (InputStream in = new FileInputStream(new File("c:\\test\\Mydemo.java"))) {
int data=-1;
while((data=in.read())!=-1) {
System.out.println((char)data);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
BufferedInputStream通过内部缓冲区实现,在新建某输入流对应的BufferedInputStream后,当我们通过read()读取输入流的数据时,BufferedInputStream会将输入流的数据分批的填入到缓冲区中,每当缓冲区中的数据被读完之后,输入流会再次填充数据缓冲区;如此反复,直到我们读完输入流数据位置
package demo;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class Demo04 {
public static void main(String[] args) {
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("c:\\temp.bmp"))) {
int data=-1;
while((data=bis.read())!=-1) {
System.out.println(data);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
FileInputStream比BufferedInputStream效率高的多,缓冲中的数据实际上是保存在内存中,而原始数据可能是保存在硬盘或NandFlash等存储介质中;而从内存中读取数据的速度比从硬盘读取数据的速度至少快10倍以上。
FileInputStream不支持mark/reset操作;
BufferedInputStream支持此操作