FileinputStream和Bufferedinputstream的区别

FileinputStream是inputstream的一个子类,是字节输入流,有read(E)方法来实现从磁盘中读取文件。

eg:public class FileInputStream extends InputStream{}

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class Damo01 {
	public static void main(String[] args) {
		try (InputStream file = new FileInputStream("F:\\qq\\新建文件夹\\250.txt")) {
             //文件中内容为250000
			System.out.println((char)file.read());//读取文件中第一个字节
		} catch (IOException e) {
			e.printStackTrace();
		}
		}
	}

输出结果为:
2

同时为了提高读取效率,fileinputStream还重载了read(byte[] bt)方法,定义一个字节数组作为就缓冲区,read()方法会尽可能的读取字节到缓冲区,但不会超过缓冲区大小,然后返回实际读取的多少个字节,即缓存读取

eg:public class BufferedInputStream extends FilterInputStream {}

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class Damo01 {
	public static void main(String[] args) {
		try (InputStream file = new FileInputStream("F:\\qq\\新建文件夹\\521.txt")) {
			int len = -1;
            //定义1000个字节的缓冲区
			byte[] bt= new byte[1000];

			while ((len=file.read(bt))!=-1) {
				System.out.printf("读取到%d个\n",len);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
输出结果为:
读取到1000个
读取到1000个
读取到1000个
读取到1000个
读取到941个

BufferedinputStream是fileinputStream的一个子类,同时也是fileinputStream的一个装饰,虽然bufferedinputStream也有缓存读取,但与fileinputStream不同的是bufferedinputStream的缓存读取是在底层维护了一片缓冲区,它存在于内存中,其大小为8192个字节,然后每次读取时是从缓冲区,即内存中直接读取内容。

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class Damo02 {
	public static void main(String[] args) {
		try (BufferedInputStream f1 = new BufferedInputStream(new FileInputStream("F:\\qq\\新建文件夹\\521.txt"))) {
			
			byte[] bt = new byte[1000];
			int len =-1;
			
			while ((len=f1.read(bt))!=-1) {
				System.out.printf("读取到%d个\n",len);;
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
输出结果为:
读取到1000个
读取到1000个
读取到1000个
读取到1000个
读取到941个

大致一看述代码,似乎与fileinputStream的代码相似,然而却大有不同,fileinputStream是以文件地址作为参数,读取时是从磁盘上读取字节,而bufferedStream是以莫非输入流作为参数,其会将该输出流数据分批读取,每次读取一部分数据到到缓冲区,缓冲区的数据被读完,在读取数据到缓冲区。这种读取的方法,比从直接从磁盘上读取快的多。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值