以InputStream和ByteArrayInputStream為中心的Java工程師

一、了解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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
JUUNK的頭像JUUNK
上一篇 2025-01-07 09:44
下一篇 2025-01-07 09:44

相關推薦

發表回復

登錄後才能評論