赞
踩
FileInputStream就是从文件流中读取数据的一个类,它是抽象类InputStream的子类,FileInputStream从磁盘中读取数据时,可以一个一个的读取,也可以一批一批的读取,具体实现代码如下:
FileInputStream在磁盘中逐个读取数据的代码如下:
- public class InputStream01 {
- public static void main(String[] args) {
- //实例化放在try后面的小括号里自动关闭
- try (InputStream in=new FileInputStream("C:\\hpc\\新建 文本文档.txt")){
- //创建(实例化)"字节输入流"对象
-
- //保存每次读取到的字节值
- int date=-1;
-
- //正常读取:0-255
- //读取末尾:-1
- while((date=in.read())!=-1) {
- System.out.print((char)date);
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- }
这就相当于你去草莓园里摘草莓一样,你摘一个草莓,然后拿出来放在草莓园外面的箱子里,然后再进去摘,再拿出来......这样不仅耗时而且还耗力;因此,我们还可以通过在read()方法中添加参数,在磁盘中批量读取数据。
在磁盘中批量读取数据的代码如下:
- public class InputStream02 {
- public static void main(String[] args) {
- try (FileInputStream in=new FileInputStream("C:\\hpc\\新建 文本文档.txt")){
- byte[] buff=new byte[128];
- int len=-1;
- while((len=in.read(buff))!=-1) {
- System.out.printf("本次读取%d个字节:%s\n",len,Arrays.toString(buff));
- }
-
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- }
-
- }
批量读取的方式就是你拿了一个箱子进入草莓园里摘草莓,箱子摘满后再拿出来。
BufferedInputStream是抽象类InputStream的子类FilterInputStream的子类,BufferedInputStream实际上是FileInputStream的装饰器,BufferedInputStream是不能直接在磁盘中读取数据的,因此,在创建BufferedInputStream的对象时,我们要传入FileInputStream对象来作为参数,利用FileInputStream在磁盘中读取数据;BufferedInputStream本质上是通过一个内部缓冲区数组实现的,缓冲中的数据实际上是保存在内存中,这个内部缓冲数组的默认大小是8192个字节,在新建某输入流对应的BufferedInputStream后,当我们通过read()读取输入流的数据时,BufferedInputStream会将该输入流的数据分批的填入到缓冲区中,每当缓冲区中的数据被读完之后,输入流会再次填充数据缓冲区;如此反复,直到我们读完输入流数据为止。
具体实现代码如下:
- public class InputStream03 {
- public static void main(String[] args) {
- //带有缓冲区的字节输入流
- //缓冲区的默认大小为8192
-
- try(BufferedInputStream bis=new BufferedInputStream(new FileInputStream("C:\\hpc\\新建 文本文档.txt"))) {
-
-
- int date=-1;
- while((date=bis.read())!=-1) {
- System.out.print(date);
- }
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- }
-
- }
这种方法就相当于草莓园的外面放了一个箱子,有人把草莓摘好放进箱子里,我们在草莓园外面的箱子里取草莓,不用进去摘,如果箱子里没有草莓了,会有人去摘草莓将箱子填满,我们只需在外面的箱子里去草莓就行了,直到拿完草莓园的草莓为止;这个箱子我们如果没有规定大小,就默认为8192个字节大小。
总之,BufferedInputStream是在内存中读取文件,而FileInputStream是在磁盘中读取文件,因此,BufferedInputStream读取文件的效率要比FileInputStream读取文件的速度快、效率高。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。