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

Mohammad Irfan 2023年1月30日 2021年1月1日
  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