ByteArrayInputStream


ByteArrayOutputStream :https://www.cnblogs.com/zhangj-ymm/p/9860696.html

ByteArrayInputStream 是字節數組輸入流。它繼承於InputStream。
它包含一個內部緩沖區,該緩沖區包含從流中讀取的字節;通俗點說,它的內部緩沖區就是一個字節數組,而ByteArrayInputStream本質就是通過字節數組來實現的。
我們都知道,InputStream通過read()向外提供接口,供它們來讀取字節數據;而ByteArrayInputStream 的內部額外的定義了一個計數器,它被用來跟蹤 read() 方法要讀取的下一個字節。

說明
ByteArrayInputStream實際上是通過“字節數組”去保存數據。
(01) 通過ByteArrayInputStream(byte buf[]) 或 ByteArrayInputStream(byte buf[], int offset, int length) ,我們可以根據buf數組來創建字節流對象。
(02) read()的作用是從字節流中“讀取下一個字節”。
(03) read(byte[] buffer, int offset, int length)的作用是從字節流讀取字節數據,並寫入到字節數組buffer中。offset是將字節寫入到buffer的起始位置,length是寫入的字節的長度。
(04) markSupported()是判斷字節流是否支持“標記功能”。它一直返回true。
(05) mark(int readlimit)的作用是記錄標記位置。記錄標記位置之后,某一時刻調用reset()則將“字節流下一個被讀取的位置”重置到“mark(int readlimit)所標記的位置”;也就是說,reset()之后再讀取字節流時,是從mark(int readlimit)所標記的位置開始讀取。

代碼示例:

 private static final byte[] ArrayLetters = { 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C,
        0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A };

    public static void test() throws IOException {
    ByteArrayInputStream bi = new ByteArrayInputStream(ArrayLetters);
    // 從字節流中讀取5個字節
    for (int i = 0; i < 5; i++) {
        // 若能讀取下一個字節
        if (bi.available() > 0) {
        int temp = bi.read();
        System.out.println(Integer.toHexString(temp));
        }
    }
    // 若此類不支持標記,則退出
    if (!bi.markSupported()) {
        System.out.println("make not supported!");
    }
    // 標記下一個被讀取的位置,"0x66"
    bi.mark(0);
    // 跳過5個字節
    bi.skip(5);
    // 讀取5個字節
    byte[] buff = new byte[5];
    bi.read(buff);
    System.out.println(new String(buff));
    // 重置
    bi.reset();
    bi.read(buff);
    System.out.println(new String(buff));

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM