使用Java的InputStream將數據轉換成Bytes

一、InputStream簡介

InputStream是Java標準庫中的一個抽象類,它用於讀取二進制數據流。所有實現了該抽象類的子類都具有讀取數據的能力。InputStream主要提供了以下幾個方法:

  • int read():讀取單個字節數據,並返回其int形式,如果沒有數據可讀,則返回-1
  • int read(byte[] b):讀取多個字節數據,並將其存儲到字節數組b中,返回實際讀取到的字節數
  • int read(byte[] b, int off, int len):讀取多個字節數據,並將其存儲到字節數組b中,從字節數組的off位置開始寫入,最多寫入len個字節,返回實際讀取到的字節數
  • void close():關閉InputStream流,釋放與其相關聯的所有資源

通過關鍵字new創建InputStream類的子類的對象,並使用其中的read()方法,即可實現將數據轉換成bytes的操作。

二、使用InputStream讀取本地文件

在Java中,可以使用java.io.File類來表示本地文件。下面是使用InputStream讀取本地文件的示例代碼:

File file = new File("C:\\test\\test.txt");
InputStream inputStream = new FileInputStream(file);
byte[] bytes = new byte[inputStream.available()];
inputStream.read(bytes);
inputStream.close();

代碼中,首先通過File類構造函數創建File對象表示要讀取的文件,然後使用FileInputStream類的構造方法創建文件輸入流。在文件輸入流中提供了read方法讀取二進制數據,將數據寫入字節數組中,最後關閉文件輸入流。

三、使用InputStream讀取網絡數據

在Java中可以使用java.net包中的URLConnection類來獲取網絡數據。下面是使用InputStream讀取網絡數據的示例代碼:

URL url = new URL("http://www.baidu.com");
URLConnection connection = url.openConnection();
InputStream inputStream = connection.getInputStream();
byte[] bytes = new byte[inputStream.available()];
inputStream.read(bytes);
inputStream.close();

代碼中,首先使用URL類創建一個URL對象,代表想要訪問的網絡資源。然後使用openConnection方法創建一個到該URL的連接,獲取URLConnection實例。最後,使用URLConnection的getInputStream方法獲取輸入流,並使用read方法讀取網絡資源的二進制數據,將數據寫入字節數組中,關閉輸入流。

四、使用InputStream及BufferedInputStream讀取文件

讀取文件時,使用BufferedInputStream可以提高讀取效率,減少磁盤IO次數。BufferedInputStream是可以帶緩衝區的輸入字節流,它在讀取一個字節時,會盡量多地去讀取一部分數據並放到緩衝區中。

File file = new File("C:\\test\\test.txt");
InputStream inputStream = new FileInputStream(file);
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
byte[] bytes = new byte[1024];
int len;
while ((len = bufferedInputStream.read(bytes)) != -1) {
    // TODO: 對讀取到的數據進行處理
}
bufferedInputStream.close();
inputStream.close();

在代碼中,首先使用File類創建File對象,再使用FileInputStream類的構造方法創建文件輸入流,最後使用BufferedInputStream類包裹輸入流,讀取文件時使用緩衝區,提高讀取效率。

五、使用InputStream及ByteArrayOutputStream讀取網絡數據

ByteArrayOutputStream是一個可以根據需要自動增長的內存緩衝區。在讀取網絡數據時,常常需要先將其下載到內存緩衝區中,然後再進行其他處理。使用ByteArrayOutputStream可以實現很方便地將數據讀取到內存緩衝區中的操作。

URL url = new URL("http://www.baidu.com");
URLConnection connection = url.openConnection();
InputStream inputStream = connection.getInputStream();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer)) != -1) {
    byteArrayOutputStream.write(buffer, 0, len);
}
byte[] bytes = byteArrayOutputStream.toByteArray();
byteArrayOutputStream.close();
inputStream.close();

代碼中,通過URL類創建URL對象表示要訪問的網絡資源,使用openConnection方法創建連接,獲取URLConnection實例,使用getInputStream方法獲取輸入流,然後使用ByteArrayOutputStream將數據讀取到內存緩衝區中。在緩衝區中讀取數據時,可將緩衝區的容量設置得比數據量大,避免緩衝區滿後的擴容操作。

六、使用InputStream及DataInputStream讀取二進制數據

在Java中,可以使用DataInputStream類對二進制數據進行讀取。DataInputStream是一個數據輸入流,它允許應用程序以與機器無關方式從底層輸入流中讀取基本Java數據類型。例如,可以使用DataInputStream讀取int、float、double等類型的數據。

File file = new File("C:\\test\\test.bin");
InputStream inputStream = new FileInputStream(file);
DataInputStream dataInputStream = new DataInputStream(inputStream);
int value1 = dataInputStream.readInt(); // 讀取int類型
float value2 = dataInputStream.readFloat(); // 讀取float類型
double value3 = dataInputStream.readDouble(); // 讀取double類型
byte[] value4 = new byte[1024];
dataInputStream.read(value4); // 讀取字節數組
dataInputStream.close();
inputStream.close();

代碼中,首先使用File類創建File對象,然後使用FileInputStream類的構造方法創建文件輸入流,再使用DataInputStream類包裹輸入流。在使用DataInputStream讀取數據時,需指定數據類型的長度。在讀取字節數組時,需要新建一個byte數組。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/230404.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-10 18:16
下一篇 2024-12-10 18:16

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Python讀取CSV數據畫散點圖

    本文將從以下方面詳細闡述Python讀取CSV文件並畫出散點圖的方法: 一、CSV文件介紹 CSV(Comma-Separated Values)即逗號分隔值,是一種存儲表格數據的…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • 如何用Python統計列表中各數據的方差和標準差

    本文將從多個方面闡述如何使用Python統計列表中各數據的方差和標準差, 並給出詳細的代碼示例。 一、什麼是方差和標準差 方差是衡量數據變異程度的統計指標,它是每個數據值和該數據值…

    編程 2025-04-29

發表回復

登錄後才能評論