摘要:關閉此輸入流并釋放與該流關聯的所有系統資源。在此輸入流中標記當前的位置。將此流重新定位到最后一次對此輸入流調用方法時的位置。
JAVA IO源碼學習系列一(InputStream)
## 1.字節輸入流源碼InputStream介紹##
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://specialneedsforspecialkids.com/yun/68010.html
摘要:源碼內容過濾輸出流的父類,繼承自類似類本身只是簡單地重寫那些將所有請求傳遞給所包含輸出流的的所有方法。的子類可進一步地重寫這些方法中的一些方法,并且還可以提供一些額外的方法和字段。 介紹 根據名稱就可以了解到過濾輸入輸出流是做什么用的,過濾,過濾是為了干嘛呢?前面我們介紹過了字節數組輸入輸出流,對于字節數組輸入輸出流,只提供了一些必要的讀取, 寫入標記等方法或功能,這些是最基礎的,那么...
摘要:將指定數組中從偏移量開始的個字節寫入此輸出流。刷新此輸出流并強制寫出所有緩沖的輸出字節關閉此輸出流并釋放與此流有關的所有系統資源。內容不多,召喚神獸 介紹 1. 輸出流:OutputStream 之前的文章中介紹過了輸入流的超類InputStream,這篇文章也簡單的介紹一下與輸入流相對的輸出流;輸入流我們之前說過,是將磁盤,文件,或者網絡中的數據讀取出來,(比如字節數組輸入流將數據放...
摘要:我的是忙碌的一年,從年初備戰實習春招,年三十都在死磕源碼,三月份經歷了阿里五次面試,四月順利收到實習。因為我心理很清楚,我的目標是阿里。所以在收到阿里之后的那晚,我重新規劃了接下來的學習計劃,將我的短期目標更新成拿下阿里轉正。 我的2017是忙碌的一年,從年初備戰實習春招,年三十都在死磕JDK源碼,三月份經歷了阿里五次面試,四月順利收到實習offer。然后五月懷著忐忑的心情開始了螞蟻金...
摘要:原文一灰灰之系列教程文件上傳異常原理分析搭建的應用,一直工作得好好的,突然發現上傳文件失敗,提示目錄非法,實際查看目錄,結果還真沒有,下面就這個問題的表現,分析下針對文件上傳的處理過程問題分析堆棧分析問題定位,最佳的輔助手段就是堆棧 原文: 一灰灰Blog之Spring系列教程文件上傳異常原理分析 SpringBoot搭建的應用,一直工作得好好的,突然發現上傳文件失敗,提示org.s...
摘要:一面試題及剖析今日面試題今天壹哥帶各位復習一塊可能會令初學者比較頭疼的內容,起碼當時讓我很有些頭疼的內容,那就是流。在這里壹哥會從兩部分展開介紹流,即與流。除此之外盡量使用字節流。關閉此輸入流并釋放與流相關聯的任何系統資源。 一. 面試題及剖析 1. 今日面試題 今天 壹哥 帶各位復習一塊可...
閱讀 594·2021-11-18 13:12
閱讀 1314·2021-11-15 11:39
閱讀 2473·2021-09-23 11:22
閱讀 6194·2021-09-22 15:15
閱讀 3655·2021-09-02 09:54
閱讀 2310·2019-08-30 11:10
閱讀 3245·2019-08-29 14:13
閱讀 2913·2019-08-29 12:49