一、什麼是ByteArrayInputStream
ByteArrayInputStream是Java I/O中提供的一種基於byte數組的輸入流,它繼承自InputStream類,提供了一些用於讀取位元組內容的方法。ByteArrayInputStream可用於讀取byte數組中的數據,它提供了對byte數組的訪問,使得在讀取數據時,可以像讀文件一樣方便。
二、ByteArrayInputStream的使用方法
ByteArrayInputStream的構造方法如下:
public ByteArrayInputStream(byte[] buf)
參數buf是指要讀取數據的byte數組,代碼示例如下:
String str = "Hello, world!"; byte[] bytes = str.getBytes(); ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
通過上述代碼,可以得到一個ByteArrayInputStream對象bais,它的內部緩衝區內容為”Hello, world!”。
在這基礎上,我們可以使用ByteArrayInputStream提供的方法來讀取緩衝區中的內容。
三、ByteArrayInputStream常用方法
1、read()
read()方法用於一個一個讀取位元組,返回的是一個int類型的值,代表讀到的位元組數。當讀到文件尾時,會返回-1。
public int read()
示例代碼如下:
int b; while ((b = bais.read()) != -1) { System.out.print((char) b); }
輸出結果為:
Hello, world!
2、read(byte[] b, int off, int len)
read(byte[] b, int off, int len)方法用於讀取指定長度的位元組數組。off表示從數組的哪個位置開始保存讀取到的數據,len表示要讀取的數據的長度。方法會返回讀取的位元組數,如果讀到文件尾,返回-1。
public int read(byte[] b, int off, int len)
示例代碼如下:
byte[] buffer = new byte[5]; int length; while ((length = bais.read(buffer)) != -1) { for (int i = 0; i < length; i++) { System.out.print((char) buffer[i]); } }
輸出結果為:
Hello , wor ld!
3、available()
available()方法用於獲取緩衝區內剩餘的可讀位元組數。
public int available()
示例代碼如下:
int available = bais.available(); System.out.println(available);
輸出結果為:
13
4、reset()
reset()方法用於返回到輸入流的開始位置。
public void reset()
示例代碼如下:
bais.mark(0); byte[] buffer = new byte[5]; bais.read(buffer); System.out.println(new String(buffer)); bais.reset(); bais.read(buffer); System.out.println(new String(buffer));
輸出結果為:
Hello Hello
四、ByteArrayInputStream的應用
ByteArrayInputStream在內存中讀取數據,代碼效率非常高,通常用於處理位元組數組的操作。比如可以用它來實現二進位數字和十六進位字元串的互相轉換。
例如將byte數組轉換為十六進位字元串:
public static String bytesToHex(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (byte b : bytes) { sb.append(String.format("%02X", b)); } return sb.toString(); }
在上述方法中,我們需要將位元組數組轉換為ByteArrayInputStream對象,然後利用ByteArrayInputStream提供的方法進行讀取。
public static String bytesToHex(byte[] bytes) { ByteArrayInputStream bais = new ByteArrayInputStream(bytes); StringBuilder sb = new StringBuilder(); int length; byte[] buffer = new byte[1024]; while ((length = bais.read(buffer)) != -1) { for (int i = 0; i < length; i++) { sb.append(String.format("%02X", buffer[i])); } } return sb.toString(); }
這樣就實現了將byte數組轉換為十六進位字元串的功能。
五、總結
通過本文對ByteArrayInputStream的詳細講解,我們了解了ByteArrayInputStream的基本概念和用法,以及它提供的常用方法。在實際開發中,可以利用ByteArrayInputStream對byte數組進行操作,處理二進位數據和十六進位字元串的轉換等。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/294180.html