一、了解InputStream和ByteArrayInputStream
1、InputStream是Java IO包中的一個抽象類,它是所有輸入流的超類。InputStream主要用於讀取位元組流,由於它是一個抽象類,它本身並不能被實例化,需要使用InputStream的子類進行實例化。
2、ByteArrayInputStream是InputStream類的子類,它通過一個內部緩衝區來實現位元組流的讀取操作。我們可以將一個位元組數組作為參數傳遞給ByteArrayInputStream的構造器,然後使用read()方法從流中讀取位元組。
二、實現從網路流中讀取數據
1、我們需從輸入流中讀取位元組,因此我們需要實例化一個InputStream對象。
2、我們將使用Socket類來建立一個基於TCP的網路連接。為此,我們需要指定網路地址和埠號。
3、我們需要讀取從伺服器端發送的數據流,我們需要一個循環來持續執行讀取。我們還需要一個緩衝區來存儲讀取的位元組。
public class NetworkInputStreamExample { public static void main(String args[]) throws Exception { // 創建一個InputStream對象 InputStream inputStream; // 創建一個Socket對象,指定要連接的伺服器IP地址和埠號 Socket socket = new Socket("localhost", 7777); // 獲取輸入流對象 inputStream = socket.getInputStream(); // 定義一個緩衝區,用於存儲從輸入流中讀取到的數據 byte[] buffer = new byte[1024]; // 定義一個變數,用於記錄讀取到的位元組數 int length; // 循環讀取輸入流中的位元組 while ((length = inputStream.read(buffer)) != -1) { // 將讀取到的位元組轉換成字元串並輸出 System.out.println(new String(buffer, 0, length)); } // 關閉輸入流和socket連接 inputStream.close(); socket.close(); } }
三、從ByteArrayInputStream中讀取數據
1、我們需要把一個byte數組作為參數傳遞給ByteArrayInputStream構造器,來獲得一個位元組輸入流。
2、我們需要一個循環,每次從流中讀取一個位元組,並將它轉換為char類型輸出。
public class ByteArrayInputStreamExample { public static void main (String[] args) { // 定義一個byte數組 byte[] byteArray = new byte[] {65, 66, 67, 68, 69, 70}; // 使用byte數組創建一個 ByteArrayInputStream 對象 ByteArrayInputStream bais = new ByteArrayInputStream(byteArray); // 從流中讀取數據並轉換為字元 while (bais.available() > 0) { char c = (char) bais.read(); System.out.println("Read a char: " + c); } } }
四、結論
輸入流是Java中非常重要的一部分,它用於從各種數據源中讀取位元組。InputStream是一個抽象類,它是所有輸入流的超類。ByteArrayInputStream是InputStream類的一個子類,它通過一個內部緩衝區來實現位元組流的讀取操作。
儘管InputStream是一個抽象類,它仍然有很多具體的子類。當我們需要讀取網路流時,我們需要一個Socket對象來建立網路連接,並使用getInputStream()方法來獲取輸入流對象。
這篇文章中,我們介紹了一個使用ByteArrayInputStream的例子。我們使用該類從一個byte數組中讀取數據,並將數據轉換為一個char類型進行輸出。
原創文章,作者:JUUNK,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/313650.html