在 Java 中轉換輸入流為字串

Rupam Yadav 2023年1月30日 2020年12月19日
  1. 使用 Stream API 將 InputStream 轉換為字串
  2. 使用 ByteArrayOutputStream 讀取或轉換輸入流為字串
  3. 使用 Apache Commons 的 IOUtils.toString 讀取 InputStream 或將其轉換為字串
在 Java 中轉換輸入流為字串

在本教程中,我們將討論如何在 Java 中把一個 InputStream 轉換為一個字串。一個 InputStream 是一個位元組流,可以進一步用於執行一些任務,如讀取。一般來說,它是一個包含一切位元組的類。如果我們要將這個位元組流轉換為任何其他型別的資料,我們可能必須使用特定的方法。

在這裡,我們將通過以下幾種方法,在 Java 中讀取或將 InputStream 轉換為字串。

使用 Stream API 將 InputStream 轉換為字串

我們可以使用 Java 8 中的 Stream API 將 InputStream 轉換為字串。InputStreamReader 讀取輸入流,BufferedReader().lines() 幫助我們將這個 InputStream 轉換為一個 String 的流。我們可以看到,Collectors.join() 被用來連線流中的所有字串,然後返回一個單一的字串。

package com.company;

import org.apache.commons.io.IOUtils;
import java.io.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {

        try {
            InputStream inputStream = new FileInputStream("java/sampleFile.txt");

            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            Stream<String> streamOfString= new BufferedReader(inputStreamReader).lines();
            String streamToString = streamOfString.collect(Collectors.joining());

            System.out.println(streamToString);

        } catch (IOException e) {

            e.printStackTrace();
        }

    }
}

輸出:

This is a sample text file

使用 ByteArrayOutputStream 讀取或轉換輸入流為字串

我們知道,一個 InputStream 是由位元組組成的,因此我們可以 ByteArrayOutputStream 類,將 readInputStream 轉換成一個位元組陣列。之後,我們可以使用 toString() 將這個位元組陣列轉換為一個字串。

package com.company;

import java.io.*;

public class Main {

    public static void main(String[] args) {

        try {
            InputStream readInputStream = new FileInputStream("java/sampleFile.txt");

            String encoding = "UTF-8";

            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            byte[] byteSize = new byte[1024];

            int length;
            while ((length = readInputStream.read(byteSize)) != -1) {
                byteArrayOutputStream.write(byteSize, 0, length);
            }
          
            System.out.println(byteArrayOutputStream.toString(encoding));

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

輸出:

This is a sample text file

使用 Apache Commons 的 IOUtils.toString 讀取 InputStream 或將其轉換為字串

為了簡化我們的任務,我們可以使用 Apache Commons 庫中包含的 IOUtils.toString 函式。要使用 Apache Commons 庫,我們可以在專案中加入這個依賴關係。

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.8.0</version>
</dependency>

在下面的例子中,首先,我們建立了一個文字檔案 InputStream,然後呼叫 IOUtils.toString() 方法,該方法需要一個 InputStream 和轉換流的編碼。我們使用的是 UTF-8 編碼,這是普遍使用的編碼。

package com.company;

import org.apache.commons.io.IOUtils;
import java.io.*;

public class Main {
    public static void main(String[] args) {

        try {
            InputStream inputStream = new FileInputStream("java/sampleFile.txt");
          
            String steamToString = IOUtils.toString(inputStream, "UTF-8");
            System.out.println(steamToString);

        } catch (IOException e) {
            e.printStackTrace();
        }
      
    }
}

輸出:

This is a sample text file
Author: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

相關文章 - Java String

相關文章 - Java IO