目录
字段DEFAULT_BUFFER_SIZE,MAX_BUFFER_SIZE,buf,bufUpdater,count,pos,markpos,marklimit
简介
package java.io;
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
/**
* BufferedInputStream将缓冲输入并支持标记和重置方法的能力,添加到另一个输入流中。
* 当创建bufferedinputstream时,将创建一个内部缓冲区数组。
* 当读取或者跳过流中的字节时,如果需要,内部缓冲区将从所包含的输入流中重新一次读取许多字节。
* mark操作会记住输入流中的一个点,而reset操作会在
* 从包含的输入流中获取新字节之前,将自最近的mark操作以来读取的所有字节重新读取。
*
* @author Arthur van Hoff
* @since JDK1.0
*/
public
class BufferedInputStream extends FilterInputStream
字段DEFAULT_BUFFER_SIZE,MAX_BUFFER_SIZE,buf,bufUpdater,count,pos,markpos,marklimit
/**
* 8192
*/
private static int DEFAULT_BUFFER_SIZE = 8192;
/**
* 能分配的数组的最大大小。
* 一些虚拟机在数组中保留一些头字。
* 尝试分配更大的数组可能会导致 OutOfMemoryError:请求的数组大小超过VM限制
*/
private static int MAX_BUFFER_SIZE = Integer.MAX_VALUE - 8;
/**
* 存储数据的内部缓冲区数组。
* 必要时,可以用另一个大小不同的数组替换它。
*/
protected volatile byte buf[];
/**
* 为buf提供compareAndSet的原子更新器。
* 这是必要的,因为关闭可以是异步的。
* 我们使用设置buf数组为null作为该流关闭的主要指示符。
* (“in”字段在关闭时也为null。)
*/
private static final
AtomicReferenceFieldUpdater<BufferedInputStream, byte[]> bufUpdater =
AtomicReferenceFieldUpdater.newUpdater
(BufferedInputStream.class, byte[].class, "buf");
/**
* 比缓冲区中最后一个有效字节的索引大1的索引。
* 这个值总是在0到buf.length的范围内;
* 元素buf[0]到buf[count-1]包含从底层输入流获得的缓冲输入数据。
*/
protected int count;
/**
* 缓冲区中的当前位置。
* 这是从buf数组中读取的下一个字符的索引。
* <p>
* 此值始终在0到count的范围内。
* 如果它小于count,那么buf[pos]是下一个作为输入提供的字节;
* 如果它等于count,那么下一个读操作或跳操作将需要从包含的输入流中提取更多字节。
*
* @see java.io.BufferedInputStream#buf
*/
protected int pos;
/**
* 调用最后一个mark方法时pos