java輸入資料流讀取完之後重新讀取的問題

來源:互聯網
上載者:User
在檔案流讀取完之後會定位到末端,則無法再用該輸入資料流讀取資料。若用read()方法則返回-1,若你調用available()方法返回0,若要重新讀取,則要用到mark和reset方法。若要重新從0開頭開始讀取,則要在讀取輸入資料流之前用mark方法,參數readlimit由自己定義。若在讀取了第n個位元組後調用mark方法,在輸入資料流讀取完之後,調用reset則從新重第n個位元組開始讀取。   public void mark(int readlimit)           在此輸入資料流中標記當前的位置。對 reset 方法的後續調用會在最後標記的位置重新置放此流,以便後續讀取重新讀取相同的位元組。            readlimit 參數告知此輸入資料流在標記位置失效之前允許讀取的位元組數。            mark 的常規協定是:如果方法 markSupported 返回 true,那麼輸入資料流總是在調用 mark 之後記錄所有讀取的位元組,並時刻準備在調用方法 reset 時(無論何時),再次提供這些相同的位元組。但是,如果在調用 reset 之前可以從流中讀取多於 readlimit 的位元組,則不需要該流記錄任何資料。如果在mark之後讀取的資料的大小大於 readlimit和BufferedInputStream類的緩衝區大小兩者中的最大值則mark標記無效。            標記已關閉的流對其無效。            InputStream 的 mark 方法不執行任何操作。    參數:           readlimit - 在標記位置失效前可以讀取位元組的最大限制。   注意:mark和reset方法只能在BufferedInputStream中使用,BufferedInputStream類調用mark(int readlimit)方法後讀取多少位元組標記才失效,是取readlimit和BufferedInputStream類的緩衝區大小兩者中的最大值,而並非完全由readlimit確定。這個在JAVA文檔中是沒有提到的。   例子:   public PreviewImage(InputStream reader2,OutputStream os)throws IOException{          BufferedInputStream reader = new BufferedInputStream(reader2);          byte[]  b  =  new  byte[1024  *  5];   //輸出資料流的緩衝區 5kb          int  len;           reader.mark(reader.available()+1);          while  ( (len  =  reader.read(b))  !=  -1)  {              //os.write(b, 0, len);            }            reader.reset();          while  ( (len  =  reader.read(b))  !=  -1)  {              os.write(b, 0, len);            }            os.flush();           os.close();      }  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.