摘要:關(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
摘要:源碼內(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ǔ)的,那么...
摘要:將指定數(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ù)放...
摘要:我的是忙碌的一年,從年初備戰(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)始了螞蟻金...
摘要:原文一灰灰之系列教程文件上傳異常原理分析搭建的應(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...
摘要:一面試題及剖析今日面試題今天壹哥帶各位復(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í)一塊可...
閱讀 610·2021-11-18 13:12
閱讀 1328·2021-11-15 11:39
閱讀 2489·2021-09-23 11:22
閱讀 6223·2021-09-22 15:15
閱讀 3670·2021-09-02 09:54
閱讀 2322·2019-08-30 11:10
閱讀 3254·2019-08-29 14:13
閱讀 2919·2019-08-29 12:49