最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中Byte數(shù)組與InputStream相互轉換實現(xiàn)方式

 更新時間:2025年09月02日 09:33:20   作者:ecexy78041  
在Java中,byte數(shù)組(byte[])和InputStream之間的相互轉換是常見的IO操作,下面通過本文給大家分享Java中Byte數(shù)組與InputStream相互轉換方式,感興趣的朋友跟隨小編一起看看吧

在Java中,byte數(shù)組(byte[])和InputStream之間的相互轉換是常見的IO操作。以下是幾種實現(xiàn)方式:

1. Byte數(shù)組轉InputStream

方法1:使用ByteArrayInputStream(最常用)

byte[] byteArray = {72, 101, 108, 108, 111}; // "Hello"的ASCII碼
InputStream inputStream = new ByteArrayInputStream(byteArray);

方法2:使用Apache Commons IO

import org.apache.commons.io.input.ClosedInputStream;
import org.apache.commons.io.IOUtils;
byte[] byteArray = {72, 101, 108, 108, 111};
InputStream inputStream = IOUtils.toInputStream(new String(byteArray), "UTF-8");

2. InputStream轉Byte數(shù)組

方法1:使用ByteArrayOutputStream(標準方式)

public static byte[] inputStreamToByteArray(InputStream inputStream) throws IOException {
    ByteArrayOutputStream buffer = new ByteArrayOutputStream();
    int nRead;
    byte[] data = new byte[1024];
    while ((nRead = inputStream.read(data, 0, data.length)) != -1) {
        buffer.write(data, 0, nRead);
    }
    buffer.flush();
    return buffer.toByteArray();
}

方法2:使用Java 9+的InputStream.readAllBytes()

// Java 9及以上版本
byte[] byteArray = inputStream.readAllBytes();

方法3:使用Apache Commons IO

import org.apache.commons.io.IOUtils;
byte[] byteArray = IOUtils.toByteArray(inputStream);

3. 完整示例

import java.io.*;
import org.apache.commons.io.IOUtils;
public class ByteArrayInputStreamConversion {
    public static void main(String[] args) {
        try {
            // 原始數(shù)據
            String text = "Hello, World!";
            byte[] originalBytes = text.getBytes("UTF-8");
            // 1. byte[] 轉 InputStream
            System.out.println("\n1. byte[] 轉 InputStream:");
            InputStream inputStream1 = new ByteArrayInputStream(originalBytes);
            // 使用流讀取數(shù)據
            int content;
            while ((content = inputStream1.read()) != -1) {
                System.out.print((char) content);
            }
            inputStream1.close();
            // 2. InputStream 轉 byte[]
            System.out.println("\n\n2. InputStream 轉 byte[]:");
            InputStream inputStream2 = new ByteArrayInputStream(originalBytes);
            // 方法1: 使用ByteArrayOutputStream
            byte[] bytes1 = inputStreamToByteArray(inputStream2);
            System.out.println("方法1結果: " + new String(bytes1, "UTF-8"));
            inputStream2.close();
            // 方法2: 使用Java 9+的readAllBytes()
            InputStream inputStream3 = new ByteArrayInputStream(originalBytes);
            byte[] bytes2 = inputStream3.readAllBytes();
            System.out.println("方法2結果: " + new String(bytes2, "UTF-8"));
            inputStream3.close();
            // 方法3: 使用Apache Commons IO
            InputStream inputStream4 = new ByteArrayInputStream(originalBytes);
            byte[] bytes3 = IOUtils.toByteArray(inputStream4);
            System.out.println("方法3結果: " + new String(bytes3, "UTF-8"));
            inputStream4.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static byte[] inputStreamToByteArray(InputStream inputStream) throws IOException {
        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
        int nRead;
        byte[] data = new byte[1024];
        while ((nRead = inputStream.read(data, 0, data.length)) != -1) {
            buffer.write(data, 0, nRead);
        }
        buffer.flush();
        return buffer.toByteArray();
    }
}

4. 大文件處理建議

對于大文件,應避免一次性讀取全部內容到內存:

// 處理大文件的InputStream
public static void processLargeInputStream(InputStream inputStream) throws IOException {
    byte[] buffer = new byte[8192]; // 8KB緩沖區(qū)
    int bytesRead;
    while ((bytesRead = inputStream.read(buffer)) != -1) {
        // 處理讀取到的數(shù)據
        processChunk(buffer, bytesRead);
    }
}
private static void processChunk(byte[] buffer, int length) {
    // 處理數(shù)據塊的邏輯
}

注意事項

  • 資源關閉:使用完InputStream后應及時關閉,推薦使用try-with-resources
  • 字符編碼:byte[]和String轉換時需注意編碼問題
  • 內存限制:大文件應分塊處理,避免內存溢出
  • 性能考慮:緩沖區(qū)大小(如1024, 8192)影響IO性能

選擇哪種方法取決于你的具體需求、Java版本和項目依賴。對于現(xiàn)代Java項目,Java 9+的readAllBytes()是最簡潔的方式;如果需要兼容舊版本或使用額外功能,Apache Commons IO是不錯的選擇。

到此這篇關于Java中Byte數(shù)組與InputStream相互轉換的文章就介紹到這了,更多相關Java Byte數(shù)組與InputStream轉換內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 聊聊spring @Transactional 事務無法使用的可能原因

    聊聊spring @Transactional 事務無法使用的可能原因

    這篇文章主要介紹了spring @Transactional 事務無法使用的可能原因,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 使用itextpdf解決PDF合并的問題

    使用itextpdf解決PDF合并的問題

    這篇文章主要介紹了使用itextpdf解決PDF合并的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Springboot3集成Knife4j的步驟以及使用(最完整版)

    Springboot3集成Knife4j的步驟以及使用(最完整版)

    這篇文章主要介紹了Springboot3集成Knife4j的步驟以及使用的相關資料,Knife4j是一種增強Swagger的工具,支持黑色主題和更多配置選項,它與swagger-bootstrap-ui相比,提供了更現(xiàn)代的外觀和更多的功能,需要的朋友可以參考下
    2024-11-11
  • Java類加載之Class對象到Klass模型詳解

    Java類加載之Class對象到Klass模型詳解

    這篇文章主要介紹了Java類加載之Class對象到Klass模型詳解,每一個Java類在JVM中都會對應創(chuàng)建一個C++類實例,我們稱這個C++類為Klass實例,Klass實例里面存儲了java類中所描述的方法、字段、屬性等,需要的朋友可以參考下
    2023-08-08
  • 解析Java中PriorityQueue優(yōu)先級隊列結構的源碼及用法

    解析Java中PriorityQueue優(yōu)先級隊列結構的源碼及用法

    優(yōu)先級隊列是一種隊列結構,是0個或多個元素的集合,每個元素都有一個優(yōu)先權,PriorityQueue被內置于JDK中,本文就來解析Java中PriorityQueue優(yōu)先級隊列結構的源碼及用法.
    2016-05-05
  • 在Java中Collection的一些常用方法總結

    在Java中Collection的一些常用方法總結

    今天給大家?guī)淼闹R是關于Java的,文章圍繞著Java中Collection的一些常用方法展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • SpringBoot中獲取真實客戶端IP的終極方案

    SpringBoot中獲取真實客戶端IP的終極方案

    在日常開發(fā)中,獲取客戶端IP看似簡單,實則暗藏玄機,今天,小編將徹底揭秘Spring Boot中獲取真實客戶端IP的正確姿勢,讓你避開所有的坑
    2026-01-01
  • 用IntelliJ IDEA看Java類圖的方法(圖文)

    用IntelliJ IDEA看Java類圖的方法(圖文)

    這篇文章主要介紹了用IntelliJ IDEA看Java類圖的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • Java并發(fā)編程之JUC并發(fā)核心AQS同步隊列原理剖析

    Java并發(fā)編程之JUC并發(fā)核心AQS同步隊列原理剖析

    AbstractQueuedSynchronizer 簡稱 AQS,可能我們幾乎不會直接去使用它,但它卻是 JUC 的核心基礎組件,支撐著 java 鎖和同步器的實現(xiàn),大神 Doug Lea 在設計 JUC 包時希望能夠抽象一個基礎且通用的組件以支撐上層模塊的實現(xiàn),AQS 應運而生
    2021-09-09
  • Hikari連接池使用SpringBoot配置JMX監(jiān)控實現(xiàn)

    Hikari連接池使用SpringBoot配置JMX監(jiān)控實現(xiàn)

    Hikari是Spring Boot默認的數(shù)據庫連接池。區(qū)別于C3P0直接通過連接池對象獲取各項狀態(tài)指標,Hikari需要通過JMX來獲取。本文就詳細的來介紹一下,感興趣的可以了解一下
    2021-07-07

最新評論

玉田县| 耒阳市| 米林县| 富顺县| 旺苍县| 贵德县| 尉犁县| 尖扎县| 阳西县| 榆林市| 扶沟县| 章丘市| 衡山县| 上栗县| 三台县| 漳平市| 通化县| 拉萨市| 甘洛县| 佳木斯市| 邵武市| 东海县| 长子县| 华坪县| 临安市| 阿拉善右旗| 江源县| 册亨县| 长春市| 陆川县| 白城市| 游戏| 图木舒克市| 新化县| 柘城县| 台湾省| 云霄县| 岚皋县| 新乐市| 丰顺县| 平安县|