Tomcat源码阅读之底层IO封装(1)InternalNioInputBuffer的分析

最近读代码的节奏很慢,。。在HttpPrcoessor部分已经停滞了挺久的时间了。。

可能它设计到的东西还是挺多的吧。。。

今天写的是InternalNioInputBuffer类型的分析,它算是Tomcat对IO封装部分的一个十分重要的环节了,可以将其理解为用于沟通底层socket与上层servletInputStream的中间层。。。而且InternalNioInputBuffer中还实现了HTTP协议的requestLine与header部分的解析。。。

嗯,这里先来看看简单的继承结构吧:



这个够简单的了吧,这里先来看看最上层的接口InputBuffer的定义吧:

public interface InputBuffer {


    /** Return from the input stream.
        IMPORTANT: the current model assumes that the protocol will 'own' the
        buffer and return a pointer to it in ByteChunk ( i.e. the param will
        have chunk.getBytes()==null before call, and the result after the call ).
    */
	//从与这个request关联的socket读取数据保存到chunk里面
    public int doRead(ByteChunk chunk, Request request)
        throws IOException;


}

嗯,也非常的简单,就只有一个方法,doRead方法,用于读取数据,并将数据保存到chunk里面。。。


好啦,接下来就是AbstractInputBuffer的定义了,这里先来看看的一些重要的属性的申明吧:

    protected Request request;  //与当前buffer关联的tomcat的request

    protected MimeHeaders headers;  //用于保存所有的处理出来的header数据

    protected boolean parsingHeader;     //是否正在处理header

    protected boolean swallowInput;  //是否要接收当前关联的连接的数据

    protected byte[] buf;   //用于存数据的字节数组

    protected int lastValid;  //表示最后一个可用数据的下标

    protected int pos;  //当前读取到的下标

    protected int end;  //用于指向header在buffer的尾部的下标

    protected InputBuffer inputStreamInputBuffer;   //这里内部有一个InputBuffer,用于代理当前对象的一些方法,主要是暴露给外部的读取数据的api

    protected InputFilter[] filterLibrary;  //所有的filter

    protected InputFilter[] activeFilters;   //活动的filter,当外部代码调用buffer来读取数据的时候,如果有filter,那么将会用filter来处理一下

    protected int lastActiveFilter;   //最后一个活动的filter的下标

嗯,这里属性的定义还不算太多吧,不过都挺重要的,具体的每个属性是什么意思,后面的注释应该也说的比较清楚了。。。而且可以看到,具体的数据的保存其实也是保存到一个字节数组里面的。。。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值