最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決java文件流處理異常 mark/reset not supported問題

 更新時間:2020年10月08日 10:15:01   作者:微觀盡頭  
這篇文章主要介紹了解決java文件流處理異常 mark/reset not supported問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧

原因:

給定的流不支持mark和reset就會報(bào)這個錯誤。

獲取到一個網(wǎng)絡(luò)流,這個網(wǎng)絡(luò)流不允許讀寫頭來回移動,也就不允許mark/reset機(jī)制.

解決辦法:

用BufferedInputStream把原來的流包一層.

BufferedInputStream buffInputStream = new BufferedInputStream(fileInputStream);

補(bǔ)充知識:Java BufferedReader之mark和reset方法實(shí)踐

在讀取文本的操作中,常常會在讀取到文件末尾時重新到文件開頭進(jìn)行操作。通過搜索發(fā)現(xiàn),有兩種方法:

(1)mark和reset方法,但是在博客中都是以簡短的string為示例對象;

(2)利用randomacessfile中的seek方法,seek方法可進(jìn)行移動。

由于前面的文本操作使用了BufferedReader,所以只能用mark和reset方法將程序進(jìn)行完善。非常好理解這兩個方法,一個在前面做標(biāo)記,另一個重置返回到做標(biāo)記的位置。

首先,看一下mark方法

public void mark
(int readAheadLimit) throws IOException
Marks the present position in the stream. Subsequent calls to reset() will attempt to reposition the stream to this point.
Overrides:
markin class Reader
Parameters:
readAheadLimit - Limit on the number of characters that may be read while still preserving the mark. An attempt to reset the stream after reading characters up to this limit or beyond may fail. A limit value larger than the size of the input buffer will cause a new buffer to be allocated whose size is no smaller than limit. Therefore large values should be used with care.
Throws:
IllegalArgumentException- If readAheadLimit is < 0
IOException- If an I/O error occurs

mark(readAheadLimit)方法僅有一個參數(shù),翻譯過來就是“保證mark有效的情況下限制讀取的字符數(shù)。當(dāng) 讀取字符達(dá)到或超過此限制時,嘗試重置流會失敗。當(dāng)限制數(shù)值大于輸入buffer的默認(rèn)大小時,將會動態(tài)分配一個容量不小于限制數(shù)值的buffer。因此,應(yīng)該慎用大數(shù)值?!?/p>

第二,獲取文件的大小

既然要讀取某文件,需知道該文件的大小,調(diào)用file.length()方法,將會“Returns the length of the file denoted by this abstract pathname. The return value is unspecified if this pathname denotes a directory.”

由于返回?cái)?shù)值為long型,需加一個判斷(是否超出int默認(rèn)最大值,因?yàn)閙ark方法的參數(shù)為int類型)后才能進(jìn)行int的強(qiáng)制轉(zhuǎn)換

int size;
if(filesize>=2147483647){
  Toast.makeText(……).show();
}else{
  size=(int)filesize;
}

第三,設(shè)置mark參數(shù)

如果完成前兩步后,并mark(size)你就去嘗試,那么還會出錯,為什么呢?

前面的mark()方法已經(jīng)講過“當(dāng)讀取字符達(dá)到或超過此限制時,嘗試重置流會失敗”,所以最好還要將mark的size數(shù)值加1.

解決。

PS:我嘗試了270多KB的文件,也可以正常讀取。

修改---2016-07-19 17:03

吃完午飯回來后,就意識到一個問題,重復(fù)操作io是非常浪費(fèi)資源的,為何不將數(shù)據(jù)全部寫入list或map中,這樣就是從緩存中讀取數(shù)據(jù),操作更快一點(diǎn)。一下午都在修改程序,包括輸出部分及排序操作,總之對這部分的理解加深了許多。

相關(guān)文章

  • Java初始化塊及執(zhí)行過程解析

    Java初始化塊及執(zhí)行過程解析

    這篇文章主要介紹了Java初始化塊及執(zhí)行過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • java關(guān)于字符串的常用API

    java關(guān)于字符串的常用API

    字符串其實(shí)就是一串連續(xù)的字符,它是由許多單個字符連接而成的。如多個英文字母所組成的一個英文單詞。字符串中可以包含任意字符,這些字符必須包含在一對雙引號之內(nèi),今天就來介紹字符串常用的API
    2023-05-05
  • 詳解Java線程的創(chuàng)建及休眠

    詳解Java線程的創(chuàng)建及休眠

    今天帶大家學(xué)習(xí)的是Java的相關(guān)知識,文章圍繞著Java線程的創(chuàng)建及休眠展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • 詳解Java?@Documented注解的作用

    詳解Java?@Documented注解的作用

    @Documented和@Deprecated注解長得有點(diǎn)像,@Deprecated是用來標(biāo)注某個類或者方法不建議再繼續(xù)使用,@Documented只能用在注解上,本文將通過示例詳細(xì)說說@Documented注解的作用,需要的可以參考一下
    2022-09-09
  • Mybatis新手教程之簡單入門

    Mybatis新手教程之簡單入門

    這篇文章主要給大家介紹了關(guān)于Mybatis新手教程之簡單入門的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • Java中StringTokenizer的用法簡介匯總

    Java中StringTokenizer的用法簡介匯總

    StringTokenizer?是出于兼容性的原因而被保留的遺留類(雖然在新代碼中并不鼓勵使用它),建議所有尋求此功能的人使用?String?的?split?方法或?java.util.regex?包,本文給大家整理了Java?StringTokenizer用法,感興趣的朋友一起看看吧
    2022-07-07
  • Java基于接口實(shí)現(xiàn)模擬動物聲音代碼實(shí)例

    Java基于接口實(shí)現(xiàn)模擬動物聲音代碼實(shí)例

    這篇文章主要介紹了Java基于接口實(shí)現(xiàn)模擬動物聲音代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • springboot配置Hikari連接池方式

    springboot配置Hikari連接池方式

    本文介紹了在Springboot中配置Hikari連接池的具體參數(shù)和設(shè)置,涵蓋了autoCommit, connectionTimeout, idleTimeout, maxLifetime, minimumIdle, maximumPoolSize等關(guān)鍵配置項(xiàng),并提供了它們的默認(rèn)值、描述和條件下的重置規(guī)則
    2024-09-09
  • 簡單介紹java中equals以及==的用法

    簡單介紹java中equals以及==的用法

    這篇文章主要介紹了簡單介紹java中equals以及==的用法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 利用Java將2019拆分成三個素?cái)?shù)平方和的方法實(shí)例

    利用Java將2019拆分成三個素?cái)?shù)平方和的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于利用Java將2019拆分成三個素?cái)?shù)平方和的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05

最新評論

临邑县| 龙岩市| 丹巴县| 松原市| 漳州市| 修水县| 青田县| 东至县| 蓝田县| 博爱县| 房山区| 吴忠市| 忻州市| 正定县| 大田县| 郧西县| 鄂托克前旗| 乌拉特前旗| 玉门市| 通化县| 克山县| 乌拉特后旗| 迁西县| 左权县| 莱芜市| 西充县| 正定县| 西藏| 靖安县| 禄劝| 陆河县| 寿阳县| 玉溪市| 河津市| 贵德县| 平度市| 永胜县| 石景山区| 旺苍县| 革吉县| 博客|