FileInputStream是InputStream的一个子类。是从文件流读取数据,
特点:一个字节一个字节的进行读取
例:读取FileInputStram的所有字节
public static void main(String[] args) {
//创建(实例化)“字节输入流”对象
try (InputStream in = new FileInputStream(new File("D:\\License.txt"))) {
//保存每次读取到的字节值
int data = -1;
//正常读取:0-255 读取末尾:-1
while((data = in.read()) != -1) {
System.out.print((char)data);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
BufferedInputStream是缓冲输入流。他继承自FileInputStream。作用是为另一个输入流添加一些功能。例如:“缓冲功能”、“标记mark()”和“reset()重置方法”
BufferInputStream的本质是通过一个内部的缓冲数组实现的。当我们通过read()读取输入流的数据时,BufferedInputStream会将该输入流的数据分批的填入到缓冲区中。每当缓冲区中的数据被读完之后,输入流会再次填充数据缓冲区;如此反复,直到我们读完输入流数据位置。
特点:批量读取
例:使用内部缓冲区读取文件
public static void main(String[] args) {
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\License.txt"))) {
int data = -1;
while((data = bis.read()) != -1) {
System.out.println(data);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
总结:
使用缓冲区读取数据可以大大提高我们的读取效率,因为缓冲中的数据实际上是保存在内存中,而原始数据可能是保存在硬盘中;从内存中读取数据的速度比从硬盘读取数据的速度至少快10倍以上。因此,读取数据我们一般使用批量读取,而不是一个一个的进行读取。