java输入流缓冲字节流_Java IO 系列教程(二)-缓冲字节输入流(1)

缓冲字节输入流对比字节输入流在文件的读取上有着很明显的优势

从原来上来说就是,字节输入流,每次调用read方法都是从用户态切换到内核态,进行系统调用,读取一个字节的内容,再从内核态切换到用户态。而缓冲字节输入流是在用户态切换到内核态的时候,内核态本身其实也是维护着一个4K的缓冲区,此时的系统的调用把4K的内容复制到用户态的8K的缓冲区当中,发现还没有填满这个缓冲区,于是又复制了4K的内容到缓冲区,于是,每次调用read方法的时候,不是从内核态的硬盘当中去读取数据,而是从用户态的8K的缓冲区中去读取数据了,从而提升了效率

代码部分

package io.byteStream;

import java.io.BufferedInputStream;

import java.io.FileInputStream;

/**

* @Author: micro cloud fly

* @Description: BufferInputStream 缓冲字节输入流

* 关于bufferedStream的一些原理,可以参考博客https://blog.csdn.net/m0_37133375/article/details/95685751

* 从内核中一次读取8K的数据到缓冲区,即字节数组中,然后每次调用read方法,只是从字节数组这个

* 缓冲区当中去读取,只有缓冲区中没有数据的时候才去内核中再去读取,避免频繁的io开销

* @Date: Created in 11:26 下午 2020/10/18

*/

public class Demo4 {

public static void main(String[] args) throws Exception {

FileInputStream inputStream = new FileInputStream("/Users/java0904/Pictures/imgs/2.txt");

BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);

//fileinputStream每次都是从硬盘读取一个字节的数据,磁盘开销大

//而bufferdInputStream内部维护了一个缓冲区,每次从硬盘读取的是DEFAULT_BUFFER_SIZE = 8192个字节

//即8K的数据到缓冲区

int len = 0;

while ((len = bufferedInputStream.read()) != -1) {

System.out.println((char) len);

}

bufferedInputStream.close();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值