如何將OutputStream轉換為字節數組

一、使用ByteArrayOutputStream

如果我們需要將OutputStream轉換為字節數組,我們可以使用ByteArrayOutputStream。其實ByteArrayOutputStream底層就是用一個byte數組保存了所有的輸出字節,當需要輸出時,直接從byte數組中取出字節輸出即可。

下面是使用ByteArrayOutputStream將OutputStream轉換為字節數組的示例代碼:

public byte[] toByteArray(OutputStream out) throws IOException {
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    byte[] buffer = new byte[1024];
    int len;
    while ((len = out.read(buffer)) != -1) {
        bos.write(buffer, 0, len);
    }
    bos.flush();
    return bos.toByteArray();
}

二、使用PipedInputStream和PipedOutputStream

PipedInputStream和PipedOutputStream是一對管道流,可以讓一個線程將數據寫入PipedOutputStream,另一個線程從PipedInputStream讀取數據。我們可以將一個PipedOutputStream連接到一個PipedInputStream上,將數據寫入PipedOutputStream,再從PipedInputStream讀取數據,從而實現將OutputStream轉換為字節數組。

下面是使用PipedInputStream和PipedOutputStream將OutputStream轉換為字節數組的示例代碼:

public byte[] toByteArray(OutputStream out) throws IOException {
    PipedInputStream pis = new PipedInputStream();
    PipedOutputStream pos = new PipedOutputStream(pis);
    new Thread(() -> {
        try {
            out.write(pos);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }).start();
    byte[] buffer = new byte[1024];
    int len;
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    while ((len = pis.read(buffer)) != -1) {
        bos.write(buffer, 0, len);
    }
    bos.flush();
    return bos.toByteArray();
}

三、使用FileOutputStream和FileInputStream

我們也可以將OutputStream的輸出先寫入一個臨時文件中,然後再從文件中讀取字節轉換為字節數組。

下面是使用FileOutputStream和FileInputStream將OutputStream轉換為字節數組的示例代碼:

public byte[] toByteArray(OutputStream out) throws IOException {
    File tempFile = File.createTempFile("outputstream", "tmp");
    FileOutputStream fos = new FileOutputStream(tempFile);
    out.write(fos);
    FileInputStream fis = new FileInputStream(tempFile);
    byte[] buffer = new byte[1024];
    int len;
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    while ((len = fis.read(buffer)) != -1) {
        bos.write(buffer, 0, len);
    }
    bos.flush();
    return bos.toByteArray();
}

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

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

相關推薦

  • Python導入數組

    本文將為您詳細闡述Python導入數組的方法、優勢、適用場景等方面,並附上代碼示例。 一、numpy庫的使用 numpy是Python中一個強大的數學庫,其中提供了非常豐富的數學函…

    編程 2025-04-29
  • Python返回數組:一次性搞定多種數據類型

    Python是一種多用途的高級編程語言,具有高效性和易讀性的特點,因此被廣泛應用於數據科學、機器學習、Web開發、遊戲開發等各個領域。其中,Python返回數組也是一項非常強大的功…

    編程 2025-04-29
  • Python去掉數組的中括號

    在Python中,被中括號包裹的數據結構是列表,列表是Python中非常常見的數據類型之一。但是,有些時候我們需要將列表展開成一維的數組,並且去掉中括號。本文將為大家詳細介紹如何用…

    編程 2025-04-29
  • Python操作數組

    本文將從多個方面詳細介紹如何使用Python操作5個數組成的列表。 一、數組的定義 數組是一種用於存儲相同類型數據的數據結構。Python中的數組是通過列表來實現的,列表中可以存放…

    編程 2025-04-29
  • 使用FFmpeg在Java中將MP3 URL轉換為PCM

    本文介紹了使用FFmpeg在Java中將MP3 URL轉換為PCM的具體步驟,以及相應代碼示例。 一、準備工作 在使用FFmpeg之前,需要先安裝FFmpeg,可以在官網(http…

    編程 2025-04-29
  • 如何將Oracle索引變成另一個表?

    如果你需要將一個Oracle索引導入到另一個表中,可以按照以下步驟來完成這個過程。 一、創建目標表 首先,需要在數據庫中創建一個新的表格,用來存放索引數據。可以通過以下代碼創建一個…

    編程 2025-04-29
  • Python二維數組對齊輸出

    本文將從多個方面詳細闡述Python二維數組對齊輸出的方法與技巧。 一、格式化輸出 Python中提供了格式化輸出的方法,可以對輸出的字符串進行格式化處理。 names = [‘A…

    編程 2025-04-29
  • Python如何將字符串1234變成數字1234

    Python作為一種廣泛使用的編程語言,對於數字和字符串的處理提供了很多便捷的方式。如何將字符串“1234”轉化成數字“1234”呢?下面將從多個方面詳細闡述Python如何將字符…

    編程 2025-04-29
  • Python中的字節類數據

    Python作為其中一個最廣泛使用的編程語言之一,提供了多種數據類型來幫助開發者實現各種需求。在這些數據類型中,字節類數據(bytes)是一個被廣泛使用的類型。本文將會從各個方面詳…

    編程 2025-04-28
  • 如何將Java項目分成Modules並使用Git進行版本控制

    本文將向您展示如何將Java項目分成模塊,並使用Git對它們進行版本控制。分割Java項目可以使其更容易維護和拓展。Git版本控制還可以讓您跟蹤項目的發展並協作開發。 一、為什麼要…

    編程 2025-04-28

發表回復

登錄後才能評論