Java で Inputstream をバイト配列に変換

Mohammad Irfan 2023年10月12日
  1. Java の readAllBytes() メソッドを用いて Inputstream をバイト配列に変換する
  2. Java の toByteArray() メソッドを用いて Inputstream をバイト配列に変換する
  3. Java の write() メソッドを使って Inputstream をバイト配列に変換する
  4. Java の readAllBytes() メソッドを用いて InputStream をバイト配列に変換する
  5. Java の readFully() メソッドを使って InputStream をバイト配列に変換する
  6. Java の getBytes() メソッドを用いて Inputstream をバイト配列に変換する
  7. Java でカスタマイズしたコードを使って InputStream をバイト配列に変換する
  8. Java の toByteArray() メソッドを用いて Inputstream をバイト配列に変換する
Java で Inputstream をバイト配列に変換

このチュートリアルでは、Java で Inputstream をバイト配列に変換する方法を紹介し、理解するためのコード例を挙げています。

InputStream はバイトの Inputstream を表すすべてのクラスの抽象クラスでありスーパークラスです。Java はファイルや配列などの任意のソースからデータを読み込むために Inputstream を使用します。次に、このストリームをバイト配列に変換する方法を、Java の組み込みメソッドやカスタムコードを使って見ていきます。

この記事では、toByteArray()readAllBytes()readFully()getBytes()write() などの組み込みメソッドを使用します。このテキストファイルには、Welcome to Delfstack という一文が含まれており、これを読み込んでバイト配列に変換し、さらに文字列に変換して目的の結果を確認することができます。

Java の readAllBytes() メソッドを用いて Inputstream をバイト配列に変換する

readAllBytes() メソッドを使用して、すべてのデータをバイト配列にまとめることができます。このメソッドはバイト配列を返し、それを String コンストラクタに渡してテキストデータを出力することができます。

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class SimpleTesting {
  public static void main(String[] args) {
    try {
      InputStream ins = new FileInputStream("abc.txt");
      byte[] byteArray = ins.readAllBytes();
      System.out.println(new String(byteArray));
      ins.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

出力:

Welcome to Delfstack

Java の toByteArray() メソッドを用いて Inputstream をバイト配列に変換する

Apache ライブラリを使用する場合、IOUtils クラスの toByteArray() メソッドを使用して、すべてのデータをバイト配列に格納することができます。このメソッドは、テキストデータを出力するために String コンストラクタにさらに渡すことができるバイト配列を返します。

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.io.IOUtils;

public class SimpleTesting {
  public static void main(String[] args) {
    try {
      InputStream ins = new FileInputStream("abc.txt");
      byte[] bytes = IOUtils.toByteArray(ins);
      System.out.println(new String(bytes));
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

出力:

Welcome to Delftstack

Java の write() メソッドを使って Inputstream をバイト配列に変換する

すべてのデータをバイト配列にまとめるには、ByteArrayOutputStream クラスの write() メソッドを利用することができます。このメソッドはバイト配列を返し、それを String コンストラクタに渡してテキストデータを出力することができます。

package myjavaproject;

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class SimpleTesting {
  public static void main(String[] args) {
    try {
      InputStream ins = new FileInputStream("abc.txt");
      ByteArrayOutputStream buffer = new ByteArrayOutputStream();
      int read;
      byte[] data = new byte[16384];
      while ((read = ins.read(data, 0, data.length)) != -1) {
        buffer.write(data, 0, read);
      }
      System.out.println(new String(data));
      ins.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

出力:

Welcome to Delfstack

Java の readAllBytes() メソッドを用いて InputStream をバイト配列に変換する

すべてのデータをバイト配列に変換するには、DataInputStream クラスの readAllBytes() メソッドを利用します。このメソッドはバイト配列を返し、これをさらに String コンストラクタに渡してテキストデータを出力することができます。

import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class SimpleTesting {
  public static void main(String[] args) {
    try {
      String file = "abc.txt";
      DataInputStream dis = new DataInputStream(new FileInputStream(file));
      byte[] bytes = dis.readAllBytes();
      System.out.println(new String(bytes));
      dis.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

出力:

Welcome to Delftstack

Java の readFully() メソッドを使って InputStream をバイト配列に変換する

全てのデータをバイト配列に変換するには、RandomAccessFile クラスの readFully() メソッドを利用することができます。このメソッドはバイト配列を返し、これを String コンストラクタに渡すことでテキストデータを出力することができます。

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
public class SimpleTesting {
  public static void main(String[] args) {
    try {
      String file = "abc.txt";
      InputStream is = new FileInputStream(file);
      RandomAccessFile raf = new RandomAccessFile(file, "r");
      byte[] bytesData = new byte[(int) raf.length()];
      raf.readFully(bytesData);
      System.out.println(new String(bytesData));
      is.close();
      raf.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

出力:

Welcome to Delfstack

Java の getBytes() メソッドを用いて Inputstream をバイト配列に変換する

すべてのデータをバイト配列に変換するには、String クラスの getBytes() メソッドを使用します。このメソッドはバイト配列を返し、これを String コンストラクタに渡してテキストデータを出力することができます。

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.stream.Collectors;

public class SimpleTesting {
  public static void main(String[] args) {
    try {
      String file = "abc.txt";
      byte[] bytesData = {};
      InputStream is = new FileInputStream(file);
      try (BufferedReader buffer = new BufferedReader(new InputStreamReader(is))) {
        bytesData = buffer.lines().collect(Collectors.joining("\n")).getBytes();
      }
      System.out.println(new String(bytesData));
      is.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

出力:

Welcome to Delftstack

Java でカスタマイズしたコードを使って InputStream をバイト配列に変換する

組み込みのメソッドを使用したくない場合は、このカスタマイズされたコードを使用して Inputstream をバイト配列に変換します。このコードはバイト配列を返し、これを String コンストラクタに渡してテキストデータを出力することができます。

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class SimpleTesting {
  public static void main(String[] args) {
    try {
      String file = "abc.txt";
      byte[] bytesData = {};
      bytesData = getBytesFromFile(new File(file));
      System.out.println(new String(bytesData));
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
  public static byte[] getBytesFromFile(File file) throws IOException {
    InputStream is = new FileInputStream(file);
    long length = file.length();
    byte[] bytes = new byte[(int) length];
    int offset = 0;
    int numRead = 0;
    while (
        offset < bytes.length && (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) {
      offset += numRead;
    }
    if (offset < bytes.length) {
      throw new IOException("Could not read file " + file.getName());
    }
    return bytes;
  }
}

出力:

Welcome to Delfstack

Java の toByteArray() メソッドを用いて Inputstream をバイト配列に変換する

すべてのデータをバイト配列に変換するには、ByteArrayOutputStream クラスの toByteArray() メソッドを利用することができます。このメソッドはバイト配列を返し、それをさらに String コンストラクタに渡してテキストデータを出力することができます。

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class SimpleTesting {
  public static void main(String[] args) {
    try {
      String file = "abc.txt";
      InputStream is = new FileInputStream(file);
      ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
      is.transferTo(byteArrayOutputStream);
      byte[] bytesData = byteArrayOutputStream.toByteArray();
      System.out.println(new String(bytesData));
      is.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

出力:

Welcome to Delfstack

関連記事 - Java IO