Java で InputStream を文字列に変換する

Rupam Yadav 2023年1月30日 2020年12月21日
  1. 入力ストリームを InputStream から String に変換するために Stream API を使用する
  2. 入力ストリームを文字列に読み込んだり変換したりするには ByteArrayOutputStream を使用する
  3. Apache Commons の IOUtils.toString を使用して、入力ストリームを文字列に変換する
Java で InputStream を文字列に変換する

このチュートリアルでは、Java で InputStream を文字列に変換する方法について説明します。InputStream はバイトのストリームで、読み込みのようないくつかのタスクを実行するためにさらに使用することができます。一般的に、それはすべてのものをバイト単位で含むクラスです。このバイト・ストリームを他のタイプのデータに変換したい場合、特定のメソッドを使用しなければならない場合があります。

ここでは、Java で InputStream を文字列に変換する方法をいくつか紹介します。

入力ストリームを InputStream から String に変換するために Stream API を使用する

Java 8 の一部である Stream API を用いて、InputStream を文字列に変換することができます。InputStreamReader は入力ストリームを読み込み、BufferedReader().lines() はこの InputStreamString のストリームに変換するのを助ける。見ての通り、Collectors.joining() はストリーム内のすべての文字列を結合して 1つの文字列を返すために使われています。

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 はバイトで構成されていることがわかっているので、readInputStream をバイトの配列に変換する ByteArrayOutputStream クラスを作成することができます。その後、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 を使用して、入力ストリームを文字列に変換する

タスクを簡単にするために、Apache Commons ライブラリに含まれる IOUtils.toString 関数を使用することができます。Apache Commons ライブラリを使用するには、この依存関係をプロジェクトに含めることができます。

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

以下の例では、まずテキストファイルである InputStream を作成し、InputStream とストリームを変換するために使用するエンコーディングを指定して IOUtils.toString() メソッドを呼び出します。ここでは、汎用的に使用されている 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