国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:37日期:2022-08-23 10:55:10

原因:

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

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

解決辦法:

用BufferedInputStream把原來的流包一層.

BufferedInputStream buffInputStream = new BufferedInputStream(fileInputStream);

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

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

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

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

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

首先,看一下mark方法

public void mark(int readAheadLimit) throws IOExceptionMarks the present position in the stream. Subsequent calls to reset() will attempt to reposition the stream to this point.Overrides:markin class ReaderParameters: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 < 0IOException- If an I/O error occurs

mark(readAheadLimit)方法僅有一個參數,翻譯過來就是“保證mark有效的情況下限制讀取的字符數。當 讀取字符達到或超過此限制時,嘗試重置流會失敗。當限制數值大于輸入buffer的默認大小時,將會動態分配一個容量不小于限制數值的buffer。因此,應該慎用大數值。”

第二,獲取文件的大小

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

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

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

第三,設置mark參數

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

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

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

解決。

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

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

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

標簽: Java
相關文章:
主站蜘蛛池模板: 偷拍亚洲欧美 | 精品在线免费观看 | 亚洲精品一二三 | 国产一区二区三区免费大片天美 | 成人午夜两性视频免费看 | 国产一区二区三区四区在线 | 欧美人成在线观看网站高清 | 日韩综合色 | 欧美午夜激情影院 | 欧美大尺度免费一级特黄 | 中文字幕精品一区二区三区视频 | 91精品手机国产在线能 | 亚洲精品天堂在线观看 | 精品欧美一区二区三区精品久久 | 欧美特级午夜一区二区三区 | 欧美整片在线观看 | 免费久草 | 亚洲国产高清在线 | 欧美精品成人一区二区视频一 | 欧美高清在线视频一区二区 | 美女又爽又黄视频 | 亚洲巨乳自拍在线视频 | www.久操| 欧美成人毛片一级在线 | 国产一国产a一级毛片 | 中文字幕一区二区三区精品 | 性色a| 美女被强行扒开双腿激情视频 | 国产一级一级一级成人毛片 | 国产精品揄拍一区二区久久 | 男人的天堂久久爱 | 亚洲视频在线a视频 | 欧美成人xxxx | 国产蜜汁tv福利在线 | 亚洲第一区精品日韩在线播放 | 中文字幕无线精品乱码一区 | 亚洲福利精品一区二区三区 | 黄色三级网 | 久久一区二区三区99 | 99久久国产综合精品五月天 | 亚洲免费色视频 |