中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

linux系統中InputStream輸入流的reset()和mark()命令的用法

這篇文章主要介紹“linux系統中InputStream輸入流的reset()和mark()命令的用法”,在日常操作中,相信很多人在linux系統中InputStream輸入流的reset()和mark()命令的用法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”linux系統中InputStream輸入流的reset()和mark()命令的用法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

創新互聯公司主要從事成都網站建設、成都做網站、網頁設計、企業做網站、公司建網站等業務。立足成都服務宜州,十載網站建設經驗,價格優惠、服務專業,歡迎來電咨詢建站服務:18980820575

今天寫一個讀寫程序,運用到InputStream的reset方法是發現竟然失敗了,然后查了一下JDK源碼,發現BufferInputStream重寫了父類FilterInputStream的mark和resetf方法,其有支持 mark 和 reset 方法的能力。而FileInputStream則沒有重寫父類InputStream的這兩個方法,其不具有mark和reset方法的能力。

在JDK源碼中,寫到public synchronized void mark(int readlimit)在該輸入流中標記當前位置。 后續調用 reset 方法重新將流定位于最后標記位置,以便后續讀取能重新讀取相同字節。

readlimit 參數給出當前輸入流在標記位置變為非法前允許讀取的字節數。

這句話的意思是說:mark就像書簽一樣,用于標記,以后再調用reset時就可以再回到這個mark過的地方。mark方法有個參數,通過這個整型參數,你告訴系統,希望在讀出這么多個字符之前,這個mark保持有效。比如說mark(10),那么在read()10個以內的字符時,reset()操作后可以重新讀取已經讀出的數據,如果已經讀取的數據超過10個,那reset()操作后,就不能正確讀取以前的數據了,因為此時mark標記已經失效。

下面是BufferInputStream以及父類FilterInputStream 中這兩個方法的默認實現//FilterInputStream.java

public synchronized void mark(int readlimit) {in.mark(readlimit);

}

public synchronized void reset() throws IOException {in.reset();

}

<br>public boolean markSupported() {<br>    return in.markSupported()<br>}

//BufferedInputStream.java

public synchronized void mark(int readlimit) {marklimit = readlimit;

markpos = pos;

}

public synchronized void reset() throws IOException {getBufIfOpen(); // Cause exception if closedif (markpos < 0)

throw new IOException("Resetting to invalid mark");pos = markpos;

}<br><br>

public boolean markSupported() {

return true;

} //支持mark操作

而FileInputStream沒有重寫父類InputStream的默認實現,其默認實現如下:

//InputStream.java

public synchronized void mark(int readlimit) {}//空實現什么都沒有實現public synchronized void reset() throws IOException {throw new IOException("mark/reset not supported");}//不支持reset操作

public boolean markSupported() {

return false;

} //不支持mark操作

下面是一個簡單的程序,用于設置reset和mark.

import java.io.BufferedInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

public class TestInputStream {

public void read(InputStream in) throws IOException {if(in == null) {

return;

}

int len=0;

in.mark(1);

in.read() //第一次讀取

in.reset();//又可以重新讀取

in.read()//第二次讀取跟第一次讀取結果一樣。因為只讀了一個,沒有超過mark設置的整數。所以mark有效}

public static void main(String[] args) throws IOException {TestInputStream test = new TestInputStream();String fileName = "F:/Google.txt";

InputStream in1 = new FileInputStream(new File(fileName));if(!in1.markSupported()) {

in1 = new BufferedInputStream(in1);

}

test.read(in1);

byte[] buf = new byte[100];

while(in1.read(buf, 0, buf.length)!=-1) {System.out.println(buf);

}

System.out.println("Success!");

}

}

總結:

mark

public void mark(int readlimit)

mark 的常規協定是:如果方法 markSupported 返回 true,那么輸入流總是在調用 mark 之后記錄所有讀取的字節,并時刻準備在調用方法 reset 時(無論何時),再次提供這些相同的字節。但是,如果在調用 reset 之前可以從流中讀取多于 readlimit 的字節,則不需要該流記錄任何數據。

參數:

readlimit - 在標記位置失效前可以讀取字節的最大限制。

4 reset

public void reset() throws IOException

將此流重新定位到最后一次對此輸入流調用 mark 方法時的位置。

reset 的常規協定是:

1、如果方法 markSupported 返回 true,那么:

如果創建流以后未調用方法 mark,或最后調用 mark 以后從該流讀取的字節數大于最后調用 mark 時的參數,則可能拋出 IOException。

如果未拋出這樣的 IOException,則將該流重新設置為這種狀態:最近一次調用 mark 以后(如果未調用過 mark,則從文件開頭開始)讀取的所有字節將重新提供給 read 方法的后續調用者,后跟任何從調用 reset 時起將作為下一輸入數據的字節。

2、如果方法 markSupported 返回 false,那么:

對 reset 的調用可能拋出 IOException。

如果未拋出 IOException,則將該流重新設置為一種固定狀態,該狀態取決于輸入流的特定類型及其創建方式。提供給 read 方法后續調用者的字節取決于特定類型的輸入流。

除了拋出 IOException 之外,類 InputStream 的方法 reset 不執行任何操作。

拋出:

IOException - 如果未標記此流或該標記失效。

到此,關于“linux系統中InputStream輸入流的reset()和mark()命令的用法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注創新互聯網站,小編會繼續努力為大家帶來更多實用的文章!

本文名稱:linux系統中InputStream輸入流的reset()和mark()命令的用法
路徑分享:http://www.2m8n56k.cn/article16/jcgsgg.html

成都網站建設公司_創新互聯,為您提供微信小程序搜索引擎優化企業建站App開發外貿建站全網營銷推廣

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

營銷型網站建設
主站蜘蛛池模板: 在线看国产视频 | 久久精品国产第一区二区 | 特级a毛片 | 老妇激情毛片 | 日本人一级毛片视频 | 怡红院免费播放全部视频 | 女人张开腿让男人捅视频 | 手机看片日韩国产一区二区 | 久青草免费视频手机在线观看 | 久久久久久久免费 | 香港激情黄三级在线视频 | 国产美女一区二区三区 | 国产精品19禁在线观看2021 | 成人a大片高清在线观看 | 99国产精品免费观看视频 | 一级成人a免费视频 | 欧美一级影院 | 中文字幕乱码中文乱码51精品 | 国产亚洲欧美在线人成aaaa | 97一级毛片全部免费播放 | 成人五级毛片免费播放 | 亚洲一区三区 | 可以免费观看欧美一级毛片 | 韩国一大片a毛片 | 欧美一级级a在线观看 | 国产精品黄网站免费进入 | 一级特黄一欧美俄罗斯毛片 | 国产在线一二三区 | 一区二区三区在线 | 久久精品国产免费高清 | 狼人青草久久网尹人 | 欧美精品片在线观看网站 | 国产成人精视频在线观看免费 | 国产欧美一区二区成人影院 | 美女视频网站黄色 | 黄色网址网站 | 特级无码a级毛片特黄 | 久久精品a| 综合久色 | 亚洲香蕉一区二区三区在线观看 | 国产国产成人人免费影院 |