Converter Inputstream para Byte Array em Java

Mohammad Irfan 12 outubro 2023
  1. Converter InputStream em Byte Array utilizando o método readAllBytes() em Java
  2. Converter InputStream em Byte Array utilizando o método toByteArray() em Java
  3. Converter InputStream em Byte Array utilizando o método write() em Java
  4. Converter InputStream em Byte Array Utilizando o método readAllBytes() em Java
  5. Converter InputStream em Byte Array utilizando o método readFully() em Java
  6. Converter InputStream para Byte Array utilizando o método getBytes() em Java
  7. Converter InputStream para Byte Array utilizando o código personalizado em Java
  8. Converter InputStream em Byte Array utilizando o método toByteArray() em Java
Converter Inputstream para Byte Array em Java

Este tutorial introduz como converter inputstream para matriz de bytes em Java e lista alguns exemplos de códigos para compreender o tópico.

InputStream é uma classe abstracta e superclasse de todas as classes que representam um fluxo de entrada de bytes. Java utiliza um fluxo de entrada para ler dados de qualquer fonte como ficheiro, array, etc. Veremos então como converter este fluxo para matriz de bytes utilizando alguns métodos incorporados e código personalizado em Java.

Neste artigo, utilizaremos vários métodos incorporados tais como toByteArray(), readAllBytes(), readFully(), getBytes(), write(), etc. e um ficheiro de texto abc.txt é utilizado para ler dados. Este ficheiro de texto contém uma única frase, Welcome to Delfstack, que será lida e convertida num array de bytes, que pode ainda ser convertida numa string para verificar o resultado desejado.

Converter InputStream em Byte Array utilizando o método readAllBytes() em Java

Podemos utilizar o método readAllBytes() para obter todos os dados para um array de bytes. Este método devolve um array de bytes que pode ser passada mais adiante para o construtor do String para imprimir dados textuais.

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();
    }
  }
}

Resultado:

Welcome to Delfstack

Converter InputStream em Byte Array utilizando o método toByteArray() em Java

Se trabalhar na biblioteca Apache, pode utilizar o método toByteArray() da classe IOUtils para obter todos os dados no array de bytes. Este método devolve um array de bytes que pode ser passado para o construtor do String para imprimir os dados textuais.

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();
    }
  }
}

Resultado:

Welcome to Delftstack

Converter InputStream em Byte Array utilizando o método write() em Java

Podemos utilizar o método write() da classe ByteArrayOutputStream para obter todos os dados para um array de bytes. Este método devolve um array de bytes que pode ser passado para o construtor String para imprimir dados textuais.

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();
    }
  }
}

Resultado:

Welcome to Delfstack

Converter InputStream em Byte Array Utilizando o método readAllBytes() em Java

Podemos utilizar o método readAllBytes() da classe DataInputStream para converter todos os dados num array de bytes. Este método devolve um array de bytes que pode ser passado mais adiante para o construtor String para imprimir dados textuais.

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();
    }
  }
}

Resultado:

Welcome to Delftstack

Converter InputStream em Byte Array utilizando o método readFully() em Java

Podemos utilizar o método readFully() da classe RandomAccessFile para converter todos os dados num array de bytes. Este método retorna um array de bytes, que pode ser passado para o construtor String para imprimir dados textuais.

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();
    }
  }
}

Resultado:

Welcome to Delfstack

Converter InputStream para Byte Array utilizando o método getBytes() em Java

Podemos utilizar o método getBytes() da classe String para converter todos os dados em um array de bytes. Este método devolve um array de bytes que pode ser passado para o construtor da classe String para imprimir dados textuais.

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();
    }
  }
}

Resultado:

Welcome to Delftstack

Converter InputStream para Byte Array utilizando o código personalizado em Java

Se não quiser usar nenhum método integrado, use este código personalizado para converter o fluxo de entrada em um array de bytes. Este código devolve um array de bytes que pode ser passado mais adiante para o construtor String para imprimir dados textuais.

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;
  }
}

Resultado:

Welcome to Delfstack

Converter InputStream em Byte Array utilizando o método toByteArray() em Java

Podemos utilizar o método toByteArray() da classe ByteArrayOutputStream para converter todos os dados num array de bytes. Este método devolve um array de bytes que pode ser passado mais adiante para o construtor String para imprimir dados textuais.

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();
    }
  }
}

Resultado:

Welcome to Delfstack

Artigo relacionado - Java IO