成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

JAVA IO源碼學(xué)習(xí)系列一(InputStream)

mtunique / 3549人閱讀

摘要:關(guān)閉此輸入流并釋放與該流關(guān)聯(lián)的所有系統(tǒng)資源。在此輸入流中標(biāo)記當(dāng)前的位置。將此流重新定位到最后一次對(duì)此輸入流調(diào)用方法時(shí)的位置。

JAVA IO源碼學(xué)習(xí)系列一(InputStream)

## 1.字節(jié)輸入流源碼InputStream介紹##

InpuSteam是字節(jié)輸入流操作的超類(lèi)(抽象類(lèi)),定義了基本的一些操作方法,流的操作大概四部分:(1)構(gòu)造數(shù)據(jù)流(來(lái)源);(2)讀取流;(3)讀取流則需要判斷是否可讀;(4):操作結(jié)束要記得關(guān)閉;所以主要關(guān)注的方法:構(gòu)造函數(shù)(構(gòu)造數(shù)據(jù)),available()判斷當(dāng)前數(shù)據(jù)是否還能繼續(xù)讀取,read()讀取數(shù)據(jù),close()結(jié)束之后一定關(guān)閉相關(guān)資源;下面是具體的源碼:

public abstract class InputStream implements Closeable {

    //默認(rèn)可以跳過(guò)的最大范圍
    private static final int MAX_SKIP_BUFFER_SIZE = 2048;

    //讀取字節(jié)流(子類(lèi)具體實(shí)現(xiàn))
    public abstract int read() throws IOException;

    //將字節(jié)流寫(xiě)入具體的字節(jié)數(shù)組b[]
    public int read(byte b[]) throws IOException {
        return read(b, 0, b.length);
    }

    //將字節(jié)流寫(xiě)入具體的字節(jié)數(shù)組b[],從指定的位置讀off,和讀具體的大小len
    public int read(byte b[], int off, int len) throws IOException {
        if (b == null) {
            throw new NullPointerException();
            //如果讀取的大小超過(guò)了具體字節(jié)數(shù)組的容量大小,則拋出數(shù)組越界
        } 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;
    }
    //  跳過(guò)和丟棄此輸入流中數(shù)據(jù)的 n 個(gè)字節(jié)。
    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;
    }

    // 返回此輸入流下一個(gè)方法調(diào)用可以不受阻塞地從此輸入流讀?。ɑ蛱^(guò))的估計(jì)字節(jié)數(shù)。
    public int available() throws IOException {
        return 0;
    }
    //關(guān)閉此輸入流并釋放與該流關(guān)聯(lián)的所有系統(tǒng)資源。
    public void close() throws IOException {}

    //在此輸入流中標(biāo)記當(dāng)前的位置。
    public synchronized void mark(int readlimit) {}

    將此流重新定位到最后一次對(duì)此輸入流調(diào)用 mark 方法時(shí)的位置。
    public synchronized void reset() throws IOException {
        throw new IOException("mark/reset not supported");
    }
    測(cè)試此輸入流是否支持 mark 和 reset 方法。
    public boolean markSupported() {
        return false;
    }

InputSteam主要抽象了一般的方法,具體實(shí)現(xiàn)通過(guò)不同的子類(lèi),在此就不多做介紹;
神獸出發(fā):

/**
 *      ┌─┐       ┌─┐ + +
 *   ┌──┘ ┴───────┘ ┴──┐++
 *   │                 │
 *   │       ───       │++ + + +
 *   ███████───███████ │+
 *   │                 │+
 *   │       ─┴─       │
 *   │                 │
 *   └───┐         ┌───┘
 *       │         │
 *       │         │   + +
 *       │         │
 *       │         └──────────────┐
 *       │                        │
 *       │                        ├─┐
 *       │                        ┌─┘
 *       │                        │
 *       └─┐  ┐  ┌───────┬──┐  ┌──┘  + + + +
 *         │ ─┤ ─┤       │ ─┤ ─┤
 *         └──┴──┘       └──┴──┘  + + + +
 *                神獸保佑
 *               代碼無(wú)BUG!
 */

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/68010.html

相關(guān)文章

  • JAVA IO源碼學(xué)習(xí)系列(FilterInpuStream 和FilterOutputStrea

    摘要:源碼內(nèi)容過(guò)濾輸出流的父類(lèi),繼承自類(lèi)似類(lèi)本身只是簡(jiǎn)單地重寫(xiě)那些將所有請(qǐng)求傳遞給所包含輸出流的的所有方法。的子類(lèi)可進(jìn)一步地重寫(xiě)這些方法中的一些方法,并且還可以提供一些額外的方法和字段。 介紹 根據(jù)名稱(chēng)就可以了解到過(guò)濾輸入輸出流是做什么用的,過(guò)濾,過(guò)濾是為了干嘛呢?前面我們介紹過(guò)了字節(jié)數(shù)組輸入輸出流,對(duì)于字節(jié)數(shù)組輸入輸出流,只提供了一些必要的讀取, 寫(xiě)入標(biāo)記等方法或功能,這些是最基礎(chǔ)的,那么...

    Flink_China 評(píng)論0 收藏0
  • JAVA IO源碼學(xué)習(xí)系列(OutputStream)

    摘要:將指定數(shù)組中從偏移量開(kāi)始的個(gè)字節(jié)寫(xiě)入此輸出流。刷新此輸出流并強(qiáng)制寫(xiě)出所有緩沖的輸出字節(jié)關(guān)閉此輸出流并釋放與此流有關(guān)的所有系統(tǒng)資源。內(nèi)容不多,召喚神獸 介紹 1. 輸出流:OutputStream 之前的文章中介紹過(guò)了輸入流的超類(lèi)InputStream,這篇文章也簡(jiǎn)單的介紹一下與輸入流相對(duì)的輸出流;輸入流我們之前說(shuō)過(guò),是將磁盤(pán),文件,或者網(wǎng)絡(luò)中的數(shù)據(jù)讀取出來(lái),(比如字節(jié)數(shù)組輸入流將數(shù)據(jù)放...

    objc94 評(píng)論0 收藏0
  • 我的阿里之路+Java面經(jīng)考點(diǎn)

    摘要:我的是忙碌的一年,從年初備戰(zhàn)實(shí)習(xí)春招,年三十都在死磕源碼,三月份經(jīng)歷了阿里五次面試,四月順利收到實(shí)習(xí)。因?yàn)槲倚睦砗芮宄业哪繕?biāo)是阿里。所以在收到阿里之后的那晚,我重新規(guī)劃了接下來(lái)的學(xué)習(xí)計(jì)劃,將我的短期目標(biāo)更新成拿下阿里轉(zhuǎn)正。 我的2017是忙碌的一年,從年初備戰(zhàn)實(shí)習(xí)春招,年三十都在死磕JDK源碼,三月份經(jīng)歷了阿里五次面試,四月順利收到實(shí)習(xí)offer。然后五月懷著忐忑的心情開(kāi)始了螞蟻金...

    姘擱『 評(píng)論0 收藏0
  • SpringBoot文件上傳異常之temporary upload location not val

    摘要:原文一灰灰之系列教程文件上傳異常原理分析搭建的應(yīng)用,一直工作得好好的,突然發(fā)現(xiàn)上傳文件失敗,提示目錄非法,實(shí)際查看目錄,結(jié)果還真沒(méi)有,下面就這個(gè)問(wèn)題的表現(xiàn),分析下針對(duì)文件上傳的處理過(guò)程問(wèn)題分析堆棧分析問(wèn)題定位,最佳的輔助手段就是堆棧 原文: 一灰灰Blog之Spring系列教程文件上傳異常原理分析 SpringBoot搭建的應(yīng)用,一直工作得好好的,突然發(fā)現(xiàn)上傳文件失敗,提示org.s...

    klinson 評(píng)論0 收藏0
  • 高薪程序員&amp;面試題精講系列22之說(shuō)說(shuō)JavaIO流,常用哪些IO流?

    摘要:一面試題及剖析今日面試題今天壹哥帶各位復(fù)習(xí)一塊可能會(huì)令初學(xué)者比較頭疼的內(nèi)容,起碼當(dāng)時(shí)讓我很有些頭疼的內(nèi)容,那就是流。在這里壹哥會(huì)從兩部分展開(kāi)介紹流,即與流。除此之外盡量使用字節(jié)流。關(guān)閉此輸入流并釋放與流相關(guān)聯(lián)的任何系統(tǒng)資源。 一. 面試題及剖析 1. 今日面試題 今天 壹哥 帶各位復(fù)習(xí)一塊可...

    fnngj 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<