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

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

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

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

1. Byte數(shù)組轉(zhuǎn)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轉(zhuǎn)Byte數(shù)組

方法1:使用ByteArrayOutputStream(標(biāo)準(zhǔn)方式)

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ù)據(jù)
            String text = "Hello, World!";
            byte[] originalBytes = text.getBytes("UTF-8");
            // 1. byte[] 轉(zhuǎn) InputStream
            System.out.println("\n1. byte[] 轉(zhuǎn) InputStream:");
            InputStream inputStream1 = new ByteArrayInputStream(originalBytes);
            // 使用流讀取數(shù)據(jù)
            int content;
            while ((content = inputStream1.read()) != -1) {
                System.out.print((char) content);
            }
            inputStream1.close();
            // 2. InputStream 轉(zhuǎn) byte[]
            System.out.println("\n\n2. InputStream 轉(zhuǎn) byte[]:");
            InputStream inputStream2 = new ByteArrayInputStream(originalBytes);
            // 方法1: 使用ByteArrayOutputStream
            byte[] bytes1 = inputStreamToByteArray(inputStream2);
            System.out.println("方法1結(jié)果: " + new String(bytes1, "UTF-8"));
            inputStream2.close();
            // 方法2: 使用Java 9+的readAllBytes()
            InputStream inputStream3 = new ByteArrayInputStream(originalBytes);
            byte[] bytes2 = inputStream3.readAllBytes();
            System.out.println("方法2結(jié)果: " + 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結(jié)果: " + 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. 大文件處理建議

對(duì)于大文件,應(yīng)避免一次性讀取全部?jī)?nèi)容到內(nèi)存:

// 處理大文件的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ù)據(jù)
        processChunk(buffer, bytesRead);
    }
}
private static void processChunk(byte[] buffer, int length) {
    // 處理數(shù)據(jù)塊的邏輯
}

注意事項(xiàng)

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

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

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

相關(guān)文章

  • 聊聊spring @Transactional 事務(wù)無(wú)法使用的可能原因

    聊聊spring @Transactional 事務(wù)無(wú)法使用的可能原因

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

    使用itextpdf解決PDF合并的問(wèn)題

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

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

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

    Java類(lèi)加載之Class對(duì)象到Klass模型詳解

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

    解析Java中PriorityQueue優(yōu)先級(jí)隊(duì)列結(jié)構(gòu)的源碼及用法

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

    在Java中Collection的一些常用方法總結(jié)

    今天給大家?guī)?lái)的知識(shí)是關(guān)于Java的,文章圍繞著Java中Collection的一些常用方法展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • SpringBoot中獲取真實(shí)客戶端IP的終極方案

    SpringBoot中獲取真實(shí)客戶端IP的終極方案

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

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

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

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

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

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

    Hikari是Spring Boot默認(rèn)的數(shù)據(jù)庫(kù)連接池。區(qū)別于C3P0直接通過(guò)連接池對(duì)象獲取各項(xiàng)狀態(tài)指標(biāo),Hikari需要通過(guò)JMX來(lái)獲取。本文就詳細(xì)的來(lái)介紹一下,感興趣的可以了解一下
    2021-07-07

最新評(píng)論

会理县| 伊宁市| 永寿县| 西藏| 泰顺县| 呼玛县| 普安县| 汝阳县| 墨竹工卡县| 丽水市| 远安县| 屏山县| 皮山县| 长宁区| 德化县| 永定县| 扎鲁特旗| 长垣县| 嘉鱼县| 石首市| 海阳市| 邵阳市| 寻乌县| 黄骅市| 河津市| 察雅县| 迁安市| 沂南县| 荥阳市| 云林县| 枝江市| 衡水市| 大新县| 灌云县| 阿合奇县| 夏河县| 光泽县| 兰州市| 南开区| 周至县| 武冈市|