有关I/O读写的缓存的认识

                                  I/O缓冲内部运行情况

1.简单的概念

在学习java的I/O操作的时候,对它的缓冲机制有一点疑惑,所以搜索相关资料,想要大概对内部的运行情况有一个了解,加深自己对它的认识。

相关结构的认识:

外存:硬盘、软盘、光盘、U盘等,一般的软件都是安装在外存中(除计算机CPU寄存器以及内存外的存储器)

内存:与CPU进行沟通,计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。内存(Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。计算机在运行过程中,CPU不断处理指令,调用内存中的数据等信息,而且一旦计算机停止运行这些数据都会被情况。也就是说,当我们运行一个程序的时候,它实现进行的操作是将程序代码和数据加载到内存中,然后通过CPU调用读取和执行指令和数据进行程序的运行。(个人简单的总结,只适用于简单理解)

高速缓存:高速缓冲存储器是存在于主存与CPU之间的一级存储器,容量比较小但速度比主存高得多, 接近于CPU的速度。在计算机存储系统的层次结构中,是介于中央处理器和主存储器之间的高速小容量存储器。它和主存储器一起构成一级的存储器。它存储的是当时时间内CPU访问内存频率比较高的内容,用于存储使用频率比较高的数据和代码等。缓解处理数据的两端速度不匹配这种情况带来的时间上的浪费,这样做就加快了访问速度,减少了对I/O访问的频率。(部分来自百度百科)

缓存实际上就是把一些外存的数据保存到内存。

I/O功能的实现:

源自操作系统内建的函数库,这些函数完成系统调用,解决指令请求,处理相应的数据,然后将处理结果返回给应用程序。而这些函数集合起来就叫做程序接口/编程接口/API,没有API,应用系统就无法得到内核的支持。

无缓存I/O:用户层没有缓存,在内核层依然有缓存,而且当你在读取数据的时候,会将数据首先存储在内核的缓存区里面,直到内核缓冲区里面的数据装满以后,再调用I/O,输出数据。

       带缓存I/O(标准I/O):提高的书写的效率,当代缓存的I/O进行读取的时候,相较于无缓存I/O的区别在于,用户层的缓存可以提供比较大的区域,然后当用户层缓冲写满的时候,再将用户层缓存的数据写入到内核的缓存,那么相较于无缓存的I/O,有缓存的I/O写入内核的次数减少(无缓存的I/O每次写入的数据量比有缓存的少,所以写入的次数较多),故可以提高读取的效率。

Java中的flush方法:

       1. FileOutPutStream继承outputStream,并不提供flush()方法的重写所以无论内容多少write都会将二进制流直接传递给底层操作系统的I/O,flush无效果

       2.而Buffered系列的输入输出流函数是要使用缓冲区的

由于缓冲区的数据如果没有写满就无法进行输出,而flush方法是强制让缓冲区的数据进行输出,并且close()方法也具有相同的功效。

 

OutputStream bOut = new ByteArrayOutputStream();

默认有32字节的缓冲区

 

OutputStream bOut = new ByteArrayOutputStream(int a)

构建有n个字节的缓冲区

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值