摘要:關(guān)閉此輸入流并釋放與該流關(guān)聯(lián)的所有系統(tǒng)資源。在此輸入流中標(biāo)記當(dāng)前的位置。將此流重新定位到最后一次對此輸入流調(diào)用方法時(shí)的位置。
JAVA IO源碼學(xué)習(xí)系列一(InputStream)
## 1.字節(jié)輸入流源碼InputStream介紹##
InpuSteam是字節(jié)輸入流操作的超類(抽象類),定義了基本的一些操作方法,流的操作大概四部分:(1)構(gòu)造數(shù)據(jù)流(來源);(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)可以跳過的最大范圍 private static final int MAX_SKIP_BUFFER_SIZE = 2048; //讀取字節(jié)流(子類具體實(shí)現(xiàn)) public abstract int read() throws IOException; //將字節(jié)流寫入具體的字節(jié)數(shù)組b[] public int read(byte b[]) throws IOException { return read(b, 0, b.length); } //將字節(jié)流寫入具體的字節(jié)數(shù)組b[],從指定的位置讀off,和讀具體的大小len public int read(byte b[], int off, int len) throws IOException { if (b == null) { throw new NullPointerException(); //如果讀取的大小超過了具體字節(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; } // 跳過和丟棄此輸入流中數(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)用可以不受阻塞地從此輸入流讀取(或跳過)的估計(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) {} 將此流重新定位到最后一次對此輸入流調(diào)用 mark 方法時(shí)的位置。 public synchronized void reset() throws IOException { throw new IOException("mark/reset not supported"); } 測試此輸入流是否支持 mark 和 reset 方法。 public boolean markSupported() { return false; }
InputSteam主要抽象了一般的方法,具體實(shí)現(xiàn)通過不同的子類,在此就不多做介紹;
神獸出發(fā):
/** * ┌─┐ ┌─┐ + + * ┌──┘ ┴───────┘ ┴──┐++ * │ │ * │ ─── │++ + + + * ███████───███████ │+ * │ │+ * │ ─┴─ │ * │ │ * └───┐ ┌───┘ * │ │ * │ │ + + * │ │ * │ └──────────────┐ * │ │ * │ ├─┐ * │ ┌─┘ * │ │ * └─┐ ┐ ┌───────┬──┐ ┌──┘ + + + + * │ ─┤ ─┤ │ ─┤ ─┤ * └──┴──┘ └──┴──┘ + + + + * 神獸保佑 * 代碼無BUG! */
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/68010.html
摘要:源碼內(nèi)容過濾輸出流的父類,繼承自類似類本身只是簡單地重寫那些將所有請求傳遞給所包含輸出流的的所有方法。的子類可進(jìn)一步地重寫這些方法中的一些方法,并且還可以提供一些額外的方法和字段。 介紹 根據(jù)名稱就可以了解到過濾輸入輸出流是做什么用的,過濾,過濾是為了干嘛呢?前面我們介紹過了字節(jié)數(shù)組輸入輸出流,對于字節(jié)數(shù)組輸入輸出流,只提供了一些必要的讀取, 寫入標(biāo)記等方法或功能,這些是最基礎(chǔ)的,那么...
摘要:將指定數(shù)組中從偏移量開始的個(gè)字節(jié)寫入此輸出流。刷新此輸出流并強(qiáng)制寫出所有緩沖的輸出字節(jié)關(guān)閉此輸出流并釋放與此流有關(guān)的所有系統(tǒng)資源。內(nèi)容不多,召喚神獸 介紹 1. 輸出流:OutputStream 之前的文章中介紹過了輸入流的超類InputStream,這篇文章也簡單的介紹一下與輸入流相對的輸出流;輸入流我們之前說過,是將磁盤,文件,或者網(wǎng)絡(luò)中的數(shù)據(jù)讀取出來,(比如字節(jié)數(shù)組輸入流將數(shù)據(jù)放...
摘要:我的是忙碌的一年,從年初備戰(zhàn)實(shí)習(xí)春招,年三十都在死磕源碼,三月份經(jīng)歷了阿里五次面試,四月順利收到實(shí)習(xí)。因?yàn)槲倚睦砗芮宄?,我的目?biāo)是阿里。所以在收到阿里之后的那晚,我重新規(guī)劃了接下來的學(xué)習(xí)計(jì)劃,將我的短期目標(biāo)更新成拿下阿里轉(zhuǎn)正。 我的2017是忙碌的一年,從年初備戰(zhàn)實(shí)習(xí)春招,年三十都在死磕JDK源碼,三月份經(jīng)歷了阿里五次面試,四月順利收到實(shí)習(xí)offer。然后五月懷著忐忑的心情開始了螞蟻金...
摘要:原文一灰灰之系列教程文件上傳異常原理分析搭建的應(yīng)用,一直工作得好好的,突然發(fā)現(xiàn)上傳文件失敗,提示目錄非法,實(shí)際查看目錄,結(jié)果還真沒有,下面就這個(gè)問題的表現(xiàn),分析下針對文件上傳的處理過程問題分析堆棧分析問題定位,最佳的輔助手段就是堆棧 原文: 一灰灰Blog之Spring系列教程文件上傳異常原理分析 SpringBoot搭建的應(yīng)用,一直工作得好好的,突然發(fā)現(xiàn)上傳文件失敗,提示org.s...
摘要:一面試題及剖析今日面試題今天壹哥帶各位復(fù)習(xí)一塊可能會(huì)令初學(xué)者比較頭疼的內(nèi)容,起碼當(dāng)時(shí)讓我很有些頭疼的內(nèi)容,那就是流。在這里壹哥會(huì)從兩部分展開介紹流,即與流。除此之外盡量使用字節(jié)流。關(guān)閉此輸入流并釋放與流相關(guān)聯(lián)的任何系統(tǒng)資源。 一. 面試題及剖析 1. 今日面試題 今天 壹哥 帶各位復(fù)習(xí)一塊可...
閱讀 655·2021-11-18 13:12
閱讀 1419·2021-11-15 11:39
閱讀 2544·2021-09-23 11:22
閱讀 6297·2021-09-22 15:15
閱讀 3730·2021-09-02 09:54
閱讀 2379·2019-08-30 11:10
閱讀 3313·2019-08-29 14:13
閱讀 2969·2019-08-29 12:49