java io BufferedInputStream源码分析

目录

简介

字段DEFAULT_BUFFER_SIZE,MAX_BUFFER_SIZE,buf,bufUpdater,count,pos,markpos,marklimit

两个getXXXOpen方法,两个构造函数

fill方法和3个read方法

其余方法


简介

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值