根據JAVA官方文檔的描述,mark(int readlimit)方法表示,標記當前位置,并保證在mark以后最多可以讀取readlimit字節數據,mark標記仍有效。如果在mark后讀取超過readlimit字節數據,mark標記就會失效,調用reset()方法會有異常。
但實際的運行情況卻和JAVA文檔中的描述并不完全相符。 有時候在BufferedInputStream類中調用mark(int readlimit)方法后,即使讀取超過readlimit字節的數據,mark標記仍有效,仍然能正確調用reset方法重置。
事實上,mark在JAVA中的實現是和緩沖區相關的。只要緩沖區夠大,mark后讀取的數據沒有超出緩沖區的大小,mark標記就不會失效。如果不夠大,mark后又讀取了大量的數據,導致緩沖區更新,原來標記的位置自然找不到了。
因此,mark后讀取多少字節才失效,并不完全由readlimit參數確定,也和BufferedInputStream類的緩沖區大小有關。 如果BufferedInputStream類的緩沖區大小大于readlimit,在mark以后只有讀取超過緩沖區大小的數據,mark標記才會失效??聪旅娴睦?。
<span style="color: rgb(255, 0, 0);">ava代碼 |
import java.io.BufferedInputStream; |
import java.io.ByteArrayInputStream; |
import java.io.IOException; |
public class MarkExample { |
public static void main(String[] args) { |
byte[] bytes={1,2,3,4,5}; |
ByteArrayInputStream in=new ByteArrayInputStream(bytes); |
BufferedInputStream bis=new BufferedInputStream(in,2); |
System.out.print(bis.read()+","); |
System.out.println("mark"); |
posted on 2011-07-21 14:46
雪黛依夢 閱讀(1714)
評論(0) 編輯 收藏 引用 所屬分類:
JAVA--J2SE