[五] JavaIO之InputStream OutputStream簡介 方法列表說明

InputStream 和 OutputStream 對于字節流的輸入和輸出
是作為協議的存在
所以有必要了解下這兩個類提供出來的基本約定
這兩個類是抽象類,而且基本上沒什么實現,都是依賴于子類具體的去實現
但是他是對于其子類 協議綱領一般的存在
了解清楚每一個方法含義,對于后續具體的子類將會有非常大的幫助

基本含義

InputStream 所有字節輸入流的 超類 他是一個抽象類
OutputStream 所有字節輸出流的 超類 他是一個抽象類

方法列表

image_5b95f27e_7902
InputStream? 包含了讀取方法以及輔助方法
OutputStream包含了寫入方法以及輔助方法

方法對照

read()
read(byte[])
read(byte[], int, int)
write(byte[])
write(byte[], int, int)
write(int)
close close
?flush()
available()
mark(int)
markSupported()
reset()
skip(long)

方法詳解

read
read()? 從輸入流中讀取數據的下一個字節。返回 0 到 255 范圍內的 int 字節值
如果因為已經到達流末尾而沒有可用的字節,則返回值 -1
方法將會一直阻塞,直到數據可用,檢測到流的末尾或者拋出異常
無參數的read() 是抽象方法,由實現類提供實現
三個read方法實際上根本方法都是read()方法
其他兩個方法為拓展功能,邏輯便捷方法
無參數的read()返回的數據為讀取到的字節值
而有參數的則是讀取到字節數組中,所以返回值為讀取到的個數
read方法關鍵點
要么就是直接返回讀取的字節
要么就是將讀取到的字節放入字節數組中,字節數組是你傳遞進去的
image_5b95f27f_7672
write
write(int b)
將指定的字節寫入此輸出流
write 的常規協定是:向輸出流寫入一個字節, 要寫入的字節是參數 b 的八個低位?? b 的 24 個高位將被忽略
說白了就是寫入的是byte雖然參數是int
write(byte[] b)
將 b.length 個字節從指定的 byte 數組寫入此輸出流
write(b) 的常規協定是:應該與調用 write(b, 0, b.length) 的效果完全相同
write(byte[] b,int off,int len)
將指定 byte 數組中從偏移量 off 開始的 len 個字節寫入此輸出流
write(b, off, len) 的常規協定是:將數組 b 中的某些字節按順序寫入輸出流;
元素 b[off] 是此操作寫入的第一個字節,b[off+len-1] 是此操作寫入的最后一個字節
類似read的調用形式
直接寫入指定字節的write(int b)? 方法是根本
其他的是拓展功能
image_5b95f27f_28a4
read()? 與write(int b) 是根本的讀取一個字節或者寫入一個字節的方法
其余形式是針對傳入字節數組作為參數,以及指定字節數組的偏移量時的一些拓展功能
一旦傳遞了字節數組作為參數
read將會讀取數據到字節數組
write將會將字節數組的數據寫入
close
都需要關閉流,所以都有close方法
都是關閉流并釋放與此流有關的系統資源
都可能拋出IOException
在InputStream和OutputStream中,兩個close方法都是空方法

flush
flush的含義為刷新,在寫入數據時使用
所以,只有輸出流擁有flush方法
之所以需要刷新,是因為有的輸出流的寫方法實現,可能已經緩沖了以前寫入的任何字節
那么,這個方法用于提供能夠立即將數據寫入到磁盤的功能
不過,只是立即請求操作系統進行處理,而不保證這些字節實際已經寫入到物理設備,比如磁盤
下面幾個為InputStream獨有
public int available()? throws IOException??
返回此輸入流下一個方法調用可以不受阻塞地從此輸入流讀取(或跳過)的估計字節數
這句話有些繞口,直白的說就是:
在方法調用前,可以獲取到這個流中可用的字節數目
假設說有N個字節可以使用,顯然你應該很可能讀取到N個字節,或者能夠跳過N個字節
一次讀取或跳過此估計數個字節不會受阻塞
注意:
這個數目是一個預估的數量
實際的讀取或者跳過的字節數可能小于這個數
InputStream中的這個方法總是返回0?
所以這個方法能否使用依賴于子類的實現

image_5b95f27f_373b
public long skip(long n) throws IOException
返回的是實際跳過的字節數
在內部創建一個 byte 數組,然后重復將字節讀入其中,直到讀夠 n 個字節或已到達流末尾為止
image_5b95f27f_6cd7
reset()
mark(int)
markSupported()?
三個方法是對于同一個功能點的不同方法? ,可以解決重復讀的問題
mark(int)用來在此輸入流中做標記,標記當前位置? 打一個書簽
markSupported()?? 測試此輸入流是否支持 mark 和 reset 方法
reset()? 將此流重新定位到最后一次對此輸入流調用 mark 方法時的位置?? 回到書簽
看下類中的默認代碼可以發現:
默認情況下mark什么都不做
markSupported直接返回false
reset方法的調用會拋出異常
image_5b95f27f_26c1
mark的參數用于告知輸入流在標記位置失效之前允許讀取的字節數
標記已關閉的流對其無效
說起來很迷惑,用起來卻很簡單
比如
xxxStream.mark(50);//表明系統至少應該緩沖50以上個數據,以保證可以回來重新讀取
xxxStream.read();
.....
xxxStream.read();

xxxStream.reset();//reset之后,讀取到的數據將會和剛才調用mark 方法后read的數據是相同的
xxxStream.read();
.....
xxxStream.read();
如果方法 markSupported 返回 true,那么輸入流總是在調用 mark 之后記錄所有讀取的字節
并時刻準備在調用方法 reset 時(無論何時),再次提供這些相同的字節
但是,如果在調用 reset 之前可以從流中讀取多于 readlimit 的字節,則不需要該流記錄任何數據

轉載于:https://www.cnblogs.com/noteless/p/9618521.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537892.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537892.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537892.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Mysql yum 安裝后,一些重要的文件路徑

默認配置文件路徑: 配置文件:/etc/my.cnf 日志文件:/var/log//var/log/mysqld.log 服務啟動腳本:/usr/lib/systemd/system/mysqld.service socket文件:/var/run/mysqld/mysqld.pid #(a)數據庫目錄 /var/lib/mysql…

mysql雙機熱備 配置文件,MYSQL 雙機熱備配置手冊()

[原創] MYSQL 雙機熱備配置手冊[原創]http://www.chinaunix.net 作者:squall1 發表于:2007-07-23 19:01:43【發表評論】【查看原文】【存儲備份之家討論區】【關閉】作者:CU-squall發表于:2005年4月18日 8:21 可以不經作者同意自由傳播&…

[轉]資本經營董事長班告訴你:不只企業有商業模式,個人商業價值更重要

本文轉自:http://blog.sina.com.cn/s/blog_181b5b47e0102xz4v.html 東方財智-資本經營董事長班>>> 經營者如何輕松駕馭金融工具為企業發展加速、升級互聯網工具實現品牌營銷裂變、利用管理工具優化公司內部結構,把握前沿視角,實現快…

CentOS 7添加開機啟動服務腳本

原文路徑:https://blog.csdn.net/wang123459/article/details/79063703 --------------------------------------------------------- 一、添加開機自啟服務 在CentOS 7中添加開機自啟服務非常方便,只需要兩條命令(以Jenkins為例): system…

php 彩票系統,hsyl12141511 一套完整的PHP版彩票系統 - 下載 - 搜珍網

文件名大小更新時間BOEKJ02017-12-14BOEKJ\.idea02017-12-13BOEKJ\.idea\BOEKJ.iml2812017-04-28BOEKJ\.idea\modules.xml2622017-04-28BOEKJ\.idea\workspace.xml100272017-04-28BOEKJ\String-ext.js10402015-05-30BOEKJ\TianHeng.exe230402015-05-05BOEKJ\config.js309232017…

CPR認證-建材CE認證-305/2011/EU

建材CPR認證 - Regulation (EU) No 305/2011  2011年3月,歐盟頒布了新建筑產品法規RETULATION (EU) No 305/2011 – CPR,并通告了新法規于2013年7月進入強制執行,取代了老CPD指令89/106/EEC。  新的建材CPR認證也是…

python支持復數類型以下什么說法是錯誤的,【Python】專項練習題(1)

1.python代碼如下:foo [1,2]foo1 foofoo.append(3)A.foo 值為[1,2]B.foo 值為[1,2,3]C.foo1 值為[1,2]D.foo1 值為[1,2,3]答案:B D鏈接:https://www.nowcoder.com/profile/153165401/myFollowings/detail/20055659來源:牛客網2.下列程序打印…

ios10不能定位 window.navigator.geolocation.getCurrentPosition(定位第一節)

原文連接: https://blog.csdn.net/michael_ouyang/article/details/54137709 --------------------------------------------------------- 問題分析: 目前由于許多蘋果用戶都升級到了iOS系統,蘋果的iOS 10已經正式對外推送,…

php網站無法顯示,php – 在UTF-8網站上無法正確顯示的字符

我已經完成了我能想到的一切,但是在這個網頁上沒有正確顯示特殊字符.例如,在數據庫中它是:但在網站上它是:Nouveaux R�alistes這是我檢查過的一切……數據庫設置為UTF-8:該頁面是用NetBeans編寫的,文檔編碼設置為UTF-8&#xff1a…

ios如何獲取gps坐標(定位第二節)

原文連接: https://blog.csdn.net/michael_ouyang/article/details/54378338 -------------------------------------------------------------------- 在上一篇文章,解決ios 10不能定位的問題,把navigator.geolocation.getCurrentPosition…

java并發編程——線程池的工作原理與源碼解讀

2019獨角獸企業重金招聘Python工程師標準>>> 線程池的簡單介紹 基于多核CPU的發展,使得多線程開發日趨流行。然而線程的創建和銷毀,都涉及到系統調用,比較消耗系統資源,所以就引入了線程池技術,避免頻繁的線…

php pcre回溯攻擊,php preg_match pcre回溯繞過

原理需要知識:正則NFA回溯原理,php的pcre.backtrack_limit設置。正則NFA回溯原理正則表達式是一個可以被"有限狀態自動機"接受的語言類。"有限狀態自動機",擁有有限數量的狀態,每個狀態可以遷移到零個或多個狀態,輸入字串決定執行哪個狀態的遷移…

電驢更新地址

emule是通過ED2K網絡和KAD網絡尋找、連接其他emule客戶端的,所以服務器列表和KAD節點文件是emule的必需文件。 有些新手由于下載官方原版emule壓縮包或其他未集成這些必需文件的emule壓縮包,從而出現“連接不上ED2K與KAD”問題。所以學會下載更新服務器…

Vue CLI 3 可以使用 TypeScript 生成新工程

TypeScript 支持 在 Vue 2.5.0 中,我們大大改進了類型聲明以更好地使用默認的基于對象的 API。同時此版本也引入了一些其它變化,需要開發者作出相應的升級。閱讀博客文章了解更多詳情。 發布為 NPM 包的官方聲明文件 靜態類型系統能幫助你有效防止許多潛…

手機端本地圖片或者拍照的上傳功能

原文連接 https://blog.csdn.net/m0_37852904/article/details/78550136 ---------------------------------------------------------- 最近剛好在做手機端的圖片上傳功能&#xff0c;便記錄下 html&#xff1a; <input type"file" class"hide" i…

php scandir sftp,CentOS 下使用SFTP實現網站自動生成FTP賬號,實現Chroot功能

背景 手上有一個這樣的系統&#xff1a;后臺可以直接新建項目(網站)&#xff0c;只需輸入項目名稱、訪問域名(二級)以及其他一些額外信息&#xff0c;就可自動生成一個模板網站。大致原理是&#xff1a;提交這些信息的時候&#xff0c;后臺會給項目新建一個目錄&#xff0c;并把…

IOS內購詳解

介紹 最近開發的一款APP上架被駁回了&#xff0c;理由是&#xff1a; 上架的APP是培訓類&#xff0c;里面金牌視頻課程需要購買&#xff0c;Android端使用支付寶&#xff0c;微信支付。 蘋果規定 數字化內容、App功能以及服務等&#xff0c;需要使用內購 真實世界中的服務(…

匯編中的函數調用與遞歸

棧幀的結構 倘若我們要想搞清楚過程的實現&#xff0c;就必須先知道棧幀的結構是如何構成的。棧幀其實可以認為是程序棧的一段&#xff0c;而程序棧又是存儲器的一段&#xff0c;因此棧幀說到底還是存儲器的一段。那么既然是一段&#xff0c;肯定有兩個端點&#xff0c;這個不需…

php 相親 段子,精彩的男女幽默段子

精彩的男女幽默段子。撒嬌老婆洗完澡對老公撒嬌說&#xff1a;老公&#xff0c;抱我到床上去吧。老公看了看老婆&#xff0c;冷冷的回答道&#xff1a;我還是把床搬過來吧&#xff01;所以&#xff0c;撒嬌還是要看體型&#xff01;單身老公說&#xff1a;老婆&#xff0c;你不…