Ⅰ java的IO流中可以通过自定义一个数组来存储数据,为什么还要使用缓存区呢
IO流自定义字节流的缓冲区:
思路:BufferedInputStream类中read()方法的工作原理
1)先一个一个从字节流中读取字节,读取一定量(自定义)之后,存储在一个字节数组(缓冲区)(FileInputStream.read(byte[] b)),并获得存储数量(read方法的返回值)。
2)一个一个字节返回,返回一个,存储数量减1,然后指针往后移一位,准备取下一个。
3)如果存储数量为0 ,代表当前数组中所有数据已经全部取完,此时再来一次读取(read(byte[] b)),再获得此次存储数量。
4)如果存储数量(即read方法返回-1),代表读到文件末尾,返回-1。
因此,需要用到以下几个变量:
读取的字节数量,指向数组中准备取哪一个的指针,将要返回的字节变量。
Ⅱ C语言中buffer到底是什么意思是数组缓冲区为什么一般C程序中都不定义他直接拿来用呢
Buffer是NodeJS的重要数据类型,很有广泛的应用。代表原始堆的分配额的数据类型。在NodeJS中以类数组的方式使用。
在Buffer类的描述中,Buffer被定义为用于特定基本类型数据的容器,且是特定基本类型的线性优先元素序列。
Buffer提供了一个字节缓冲区,它可以从channels中读取数据到Buffer,也可以将Buffer中的数据写入到channels,所以NIO被定义为面向缓冲区编程,而IO则是被定义为面向流的编程。
当一个缓存中的数据被多次读取,实际上就减少了该数据从慢速设备中读取的量,这就存在某种算法去选择什么数据需要保存在cache中,因为尽可能多的让cache命中能提高性能。
(2)数组和缓存区别扩展阅读
Buffer类的四个变量
1、capacity
容量,必须初始化的值(因为底层是数组)
2、limit
上界,缓冲区的临界区,即最多可读到哪个位置
3、position
下标,当前读取到的位置(例如当前读出第5个元素,则读完后,position为6)
4、mark
标记,备忘位置