欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

原因:

給定的流不支持mark和reset就會報這個錯誤。

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

解決辦法:

用BufferedInputStream把原來的流包一層.

BufferedInputStream buffInputStream = new BufferedInputStream(fileInputStream);

補充知識:Java BufferedReader之mark和reset方法實踐

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

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

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

由于前面的文本操作使用了BufferedReader,所以只能用mark和reset方法將程序進行完善。非常好理解這兩個方法,一個在前面做標(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āng)限制數(shù)值大于輸入buffer的默認大小時,將會動態(tài)分配一個容量不小于限制數(shù)值的buffer。因此,應(yīng)該慎用大數(shù)值。”

第二,獲取文件的大小

既然要讀取某文件,需知道該文件的大小,調(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.”

由于返回數(shù)值為long型,需加一個判斷(是否超出int默認最大值,因為mark方法的參數(shù)為int類型)后才能進行int的強制轉(zhuǎn)換

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

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

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

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

解決。

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

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

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

相關(guān)文章

  • Java超詳細講解類的繼承

    Java超詳細講解類的繼承

    繼承就是可以直接使用前輩的屬性和方法。自然界如果沒有繼承,那一切都是處于混沌狀態(tài)。多態(tài)是同一個行為具有多個不同表現(xiàn)形式或形態(tài)的能力。多態(tài)就是同一個接口,使用不同的實例而執(zhí)行不同操作
    2022-04-04
  • 帶你重新認識MyBatis的foreach

    帶你重新認識MyBatis的foreach

    這篇文章主要介紹了重新認識MyBatis的foreach,本文提出了一種簡化<foreach>寫法的設(shè)想,更重要的是通過解決空集時生成的SQL語法問題,更深刻地理解MyBatis的foreach的生成機制,需要的朋友可以參考下
    2022-11-11
  • 搭建MyBatis-Plus框架并進行數(shù)據(jù)庫增刪改查功能

    搭建MyBatis-Plus框架并進行數(shù)據(jù)庫增刪改查功能

    這篇文章主要介紹了搭建MyBatis-Plus框架并進行數(shù)據(jù)庫增刪改查,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Mybatis核心配置文件、默認類型別名、Mybatis獲取參數(shù)值的兩種方式(實例代碼)

    Mybatis核心配置文件、默認類型別名、Mybatis獲取參數(shù)值的兩種方式(實例代碼)

    這篇文章主要介紹了Mybatis核心配置文件、默認類型別名、Mybatis獲取參數(shù)值的兩種方式,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-03-03
  • 淺析Spring獲取Bean的九種方法詳解

    淺析Spring獲取Bean的九種方法詳解

    隨著SpringBoot的普及,Spring的使用也越來越廣,在某些場景下,我們無法通過注解或配置的形式直接獲取到某個Bean。比如,在某一些工具類、設(shè)計模式實現(xiàn)中需要使用到Spring容器管理的Bean,此時就需要直接獲取到對應(yīng)的Bean,這篇文章主要介紹了Spring獲取Bean的九種方法
    2023-01-01
  • Spring?Security實現(xiàn)HTTP認證

    Spring?Security實現(xiàn)HTTP認證

    本文主要介紹了Spring?Security實現(xiàn)HTTP認證,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧<BR>
    2022-06-06
  • java開發(fā)分布式服務(wù)框架Dubbo暴露服務(wù)過程詳解

    java開發(fā)分布式服務(wù)框架Dubbo暴露服務(wù)過程詳解

    這篇文章主要為大家介紹了java開發(fā)分布式服務(wù)框架Dubbo暴露服務(wù)的過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-11-11
  • java實現(xiàn)ip地址與十進制數(shù)相互轉(zhuǎn)換

    java實現(xiàn)ip地址與十進制數(shù)相互轉(zhuǎn)換

    本文介紹在java中IP地址轉(zhuǎn)換十進制數(shù)及把10進制再轉(zhuǎn)換成IP地址的方法及實例參考,曬出來和大家分享一下
    2012-12-12
  • SpringBoot 如何從配置文件讀取值到對象中

    SpringBoot 如何從配置文件讀取值到對象中

    這篇文章主要介紹了SpringBoot 如何從配置文件讀取值到對象中,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SpringBoot+POI實現(xiàn)給word添加水印功能

    SpringBoot+POI實現(xiàn)給word添加水印功能

    這篇文章主要介紹了SpringBoot+POI實現(xiàn)給word添加水印功能,文中通過代碼示例講解的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-06-06

最新評論