博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA IO源码学习系列一(InputStream)
阅读量:6816 次
发布时间:2019-06-26

本文共 3046 字,大约阅读时间需要 10 分钟。

JAVA IO源码学习系列一(InputStream)

## 1.字节输入流源码InputStream介绍##

  1. InpuSteam是字节输入流操作的超类(抽象类),定义了基本的一些操作方法,流的操作大概四部分:(1)构造数据流(来源);(2)读取流;(3)读取流则需要判断是否可读;(4):操作结束要记得关闭;所以主要关注的方法:构造函数(构造数据),available()判断当前数据是否还能继续读取,read()读取数据,close()结束之后一定关闭相关资源;下面是具体的源码:

public abstract class InputStream implements Closeable {    //默认可以跳过的最大范围    private static final int MAX_SKIP_BUFFER_SIZE = 2048;    //读取字节流(子类具体实现)    public abstract int read() throws IOException;    //将字节流写入具体的字节数组b[]    public int read(byte b[]) throws IOException {        return read(b, 0, b.length);    }    //将字节流写入具体的字节数组b[],从指定的位置读off,和读具体的大小len    public int read(byte b[], int off, int len) throws IOException {        if (b == null) {            throw new NullPointerException();            //如果读取的大小超过了具体字节数组的容量大小,则抛出数组越界        } else if (off < 0 || len < 0 || len > b.length - off) {            throw new IndexOutOfBoundsException();        } else if (len == 0) {            return 0;        }        int c = read();        if (c == -1) {            return -1;        }        b[off] = (byte)c;        int i = 1;        try {            for (; i < len ; i++) {                c = read();                if (c == -1) {                    break;                }                b[off + i] = (byte)c;            }        } catch (IOException ee) {        }        return i;    }    //  跳过和丢弃此输入流中数据的 n 个字节。    public long skip(long n) throws IOException {        long remaining = n;        int nr;        if (n <= 0) {            return 0;        }        int size = (int)Math.min(MAX_SKIP_BUFFER_SIZE, remaining);        byte[] skipBuffer = new byte[size];        while (remaining > 0) {            nr = read(skipBuffer, 0, (int)Math.min(size, remaining));            if (nr < 0) {                break;            }            remaining -= nr;        }        return n - remaining;    }    // 返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数。    public int available() throws IOException {        return 0;    }    //关闭此输入流并释放与该流关联的所有系统资源。    public void close() throws IOException {}    //在此输入流中标记当前的位置。    public synchronized void mark(int readlimit) {}    将此流重新定位到最后一次对此输入流调用 mark 方法时的位置。    public synchronized void reset() throws IOException {        throw new IOException("mark/reset not supported");    }    测试此输入流是否支持 mark 和 reset 方法。    public boolean markSupported() {        return false;    }

InputSteam主要抽象了一般的方法,具体实现通过不同的子类,在此就不多做介绍;

神兽出发:

/** *      ┌─┐       ┌─┐ + + *   ┌──┘ ┴───────┘ ┴──┐++ *   │                 │ *   │       ───       │++ + + + *   ███████───███████ │+ *   │                 │+ *   │       ─┴─       │ *   │                 │ *   └───┐         ┌───┘ *       │         │ *       │         │   + + *       │         │ *       │         └──────────────┐ *       │                        │ *       │                        ├─┐ *       │                        ┌─┘ *       │                        │ *       └─┐  ┐  ┌───────┬──┐  ┌──┘  + + + + *         │ ─┤ ─┤       │ ─┤ ─┤ *         └──┴──┘       └──┴──┘  + + + + *                神兽保佑 *               代码无BUG! */

转载地址:http://zvdzl.baihongyu.com/

你可能感兴趣的文章
CentOS 6.9永久设置静态路由表以及路由表常用设置
查看>>
解决Docker时区与主机时区不一致的问题
查看>>
思考与知识
查看>>
访问日志不记录静态文件 访问日志切割 静态元素过期时间
查看>>
idea中复制module和module中的蓝色tag出现的方法
查看>>
python中的面相对象
查看>>
Spring缓存注解@Cache使用
查看>>
去除wordpress的category各方法对比
查看>>
traceroute
查看>>
精通汇编语言,有兴趣一起搞破解的请进!
查看>>
C#缺省参数可以让代码变得更加简洁明了与时俱进心里敞亮了很多了
查看>>
【自然框架】js版的QuickPager分页控件 V2.0
查看>>
poj-2049 Finding Nemo *
查看>>
模块化编程本质探讨
查看>>
利用博客与视频分享和交流知识和经验
查看>>
js操作dom对象
查看>>
Windows2003服务器安全配置:先关闭不需要的端口(转自)
查看>>
HDU1247 Hat’s Words 【trie树】
查看>>
iOS开发--动画篇之layout动画深入
查看>>
WorldWind源码剖析系列:视景体类Frustum
查看>>