1、概述
ByteArrayInputStream是一個字節流,它可以把一個byte數組包裝成一個輸入流。它提供了將一個byte數組的數據讀取成一個輸入流的功能。我們可以使用ByteArrayInputStream來讀取內存中的byte數組並將其轉換為InputStream。
2、ByteArrayInputStream的構造函數
1、ByteArrayInputStream(byte[] buf)
創建一個新的ByteArrayInputStream,它使用buf作為其緩衝區數組。The array is not copied. The array is not copied; the reference to the array is kept and later used.
2、ByteArrayInputStream(byte[] buf, int offset, int length)
創建一個新的ByteArrayInputStream,它使用buf作為其緩衝區數組。緩衝區的起始位置是offset,緩衝區的長度是length。The buffer is not copied; the reference to the buffer is kept and later used. The buffer array’s mark is set to the specified offset.
3、ByteArrayInputStream的方法
1、close()
關閉此輸入流並釋放與流相關聯的所有資源。一旦流被關閉,試圖使用此流讀取數據將拋出IOException。
2、available()
返回此輸入流當前可以讀取(或跳過)的字節數的估計值。
3、mark(int readlimit)
將此流的標記設置在當前的流位置。在標記被設置且未被當前流的方法重置前,調用reset方法可將流重新定位到這一點。
4、markSupported()
測試此輸入流是否支持mark和reset方法。
5、read()
從此輸入流中讀取下一個數據字節,並返回一個byte值,範圍從0到255。如果由於已達到流末尾而沒有可用的字節,則返回值為-1。
6、read(byte[] b)
從此輸入流中將最多b.length個字節的數據讀入一個byte數組中。試圖讀取多於b.length個字節的數據將導致拋出IOException。此方法將阻塞直到一個字節可用,或者流的末尾被檢測到。如果流已經結束,返回值為-1。
7、read(byte[] b, int off, int len)
從此輸入流中將最多len個字節的數據讀入一個byte數組中。試圖讀取多於len個字節的數據將導致拋出IOException。此方法將阻塞直到一個字節可用,或者流的末尾被檢測到。如果流已經結束,返回值為-1。
8、reset()
將此流重新定位到上次對此輸入流調用mark方法時的位置。
9、skip(long n)
跳過並丟棄此輸入流中的n個字節,而不使其讀取到任何字節。
4、示例代碼
public static void main(String[] args) throws IOException { String str = "Hello World!"; byte[] byteArray = str.getBytes(); ByteArrayInputStream inputStream = new ByteArrayInputStream(byteArray); int data = inputStream.read(); while(data != -1){ char output = (char) data; System.out.print(output); data = inputStream.read(); } inputStream.close(); }
5、總結
通過ByteArrayInputStream,我們可以方便地將一個byte數組中的數據讀取為InputStream。此外,ByteArrayInputStream還提供了一些方便的方法,比如mark、reset和skip等。在讀取內存中的byte數組時,使用ByteArrayInputStream是非常方便和高效的選擇。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/312647.html