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

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

這篇文章主要介紹“l(fā)inux系統(tǒng)中InputStream輸入流的reset()和mark()命令的用法”,在日常操作中,相信很多人在linux系統(tǒng)中InputStream輸入流的reset()和mark()命令的用法問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”linux系統(tǒng)中InputStream輸入流的reset()和mark()命令的用法”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站建設(shè)、成都做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)宜州,十載網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢(xún)建站服務(wù):18980820575

今天寫(xiě)一個(gè)讀寫(xiě)程序,運(yùn)用到InputStream的reset方法是發(fā)現(xiàn)竟然失敗了,然后查了一下JDK源碼,發(fā)現(xiàn)BufferInputStream重寫(xiě)了父類(lèi)FilterInputStream的mark和resetf方法,其有支持 mark 和 reset 方法的能力。而FileInputStream則沒(méi)有重寫(xiě)父類(lèi)InputStream的這兩個(gè)方法,其不具有mark和reset方法的能力。

在JDK源碼中,寫(xiě)到public synchronized void mark(int readlimit)在該輸入流中標(biāo)記當(dāng)前位置。 后續(xù)調(diào)用 reset 方法重新將流定位于最后標(biāo)記位置,以便后續(xù)讀取能重新讀取相同字節(jié)。

readlimit 參數(shù)給出當(dāng)前輸入流在標(biāo)記位置變?yōu)榉欠ㄇ霸试S讀取的字節(jié)數(shù)。

這句話的意思是說(shuō):mark就像書(shū)簽一樣,用于標(biāo)記,以后再調(diào)用reset時(shí)就可以再回到這個(gè)mark過(guò)的地方。mark方法有個(gè)參數(shù),通過(guò)這個(gè)整型參數(shù),你告訴系統(tǒng),希望在讀出這么多個(gè)字符之前,這個(gè)mark保持有效。比如說(shuō)mark(10),那么在read()10個(gè)以?xún)?nèi)的字符時(shí),reset()操作后可以重新讀取已經(jīng)讀出的數(shù)據(jù),如果已經(jīng)讀取的數(shù)據(jù)超過(guò)10個(gè),那reset()操作后,就不能正確讀取以前的數(shù)據(jù)了,因?yàn)榇藭r(shí)mark標(biāo)記已經(jīng)失效。

下面是BufferInputStream以及父類(lèi)FilterInputStream 中這兩個(gè)方法的默認(rèn)實(shí)現(xiàn)//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沒(méi)有重寫(xiě)父類(lèi)InputStream的默認(rèn)實(shí)現(xiàn),其默認(rèn)實(shí)現(xiàn)如下:

//InputStream.java

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

public boolean markSupported() {

return false;

} //不支持mark操作

下面是一個(gè)簡(jiǎn)單的程序,用于設(shè)置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()//第二次讀取跟第一次讀取結(jié)果一樣。因?yàn)橹蛔x了一個(gè),沒(méi)有超過(guò)mark設(shè)置的整數(shù)。所以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!");

}

}

總結(jié):

mark

public void mark(int readlimit)

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

參數(shù):

readlimit - 在標(biāo)記位置失效前可以讀取字節(jié)的最大限制。

4 reset

public void reset() throws IOException

將此流重新定位到最后一次對(duì)此輸入流調(diào)用 mark 方法時(shí)的位置。

reset 的常規(guī)協(xié)定是:

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

如果創(chuàng)建流以后未調(diào)用方法 mark,或最后調(diào)用 mark 以后從該流讀取的字節(jié)數(shù)大于最后調(diào)用 mark 時(shí)的參數(shù),則可能拋出 IOException。

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

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

對(duì) reset 的調(diào)用可能拋出 IOException。

如果未拋出 IOException,則將該流重新設(shè)置為一種固定狀態(tài),該狀態(tài)取決于輸入流的特定類(lèi)型及其創(chuàng)建方式。提供給 read 方法后續(xù)調(diào)用者的字節(jié)取決于特定類(lèi)型的輸入流。

除了拋出 IOException 之外,類(lèi) InputStream 的方法 reset 不執(zhí)行任何操作。

拋出:

IOException - 如果未標(biāo)記此流或該標(biāo)記失效。

到此,關(guān)于“l(fā)inux系統(tǒng)中InputStream輸入流的reset()和mark()命令的用法”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

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

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、搜索引擎優(yōu)化、企業(yè)建站App開(kāi)發(fā)外貿(mào)建站、全網(wǎng)營(yíng)銷(xiāo)推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷(xiāo)型網(wǎng)站建設(shè)
主站蜘蛛池模板: 99九九精品免费视频观看 | 国产在线观看一区二区三区四区 | 国产高清视频在线观看 | 欧美久久久久欧美一区 | a大片久久爱一级 | 手机在线黄色 | 男人的天堂久久精品激情 | 喷潮白浆 | 农村寡妇特一级毛片 | 国产在线观看精品一区二区三区91 | 亚洲字幕波多野结衣作品 | 在线观看久草视频 | 欧美日韩在线视频观看 | 国产日韩精品一区二区 | 亚洲欧美自拍一区 | 免费三级网站 | 国产精选莉莉私人影院 | 亚洲美女福利视频在线 | 成年人黄页 | 97免费视频在线观看 | 成人久久久观看免费毛片 | 日韩精品综合 | 男女乱淫真视频免费一级毛片 | 欧美毛片 | 成人精品一区二区不卡视频 | 一本色道久久综合狠狠躁 | 亚洲 欧美 视频 | 黄页网址免费观看18网站 | 成人深夜福利在线播放不卡 | 欧美les视频xxxx在线观看 | 三级国产在线观看 | 欧美极品欧美精品欧美视频 | 国产呦精品一区二区三区网站 | 美国一级大黄香蕉片 | 亚洲aa | 性欧美videos精品 | 欧洲免费无线码二区5 | 天天都色| 国产欧美日韩综合精品无毒 | 欧美亚洲第一区 | 91玖玖 |