Convertir InputStream en byte array en Java

Mohammad Irfan 12 octubre 2023
  1. Convertir InputStream en byte array usando el método readAllBytes() en Java
  2. Convertir InputStream en byte array usando el método toByteArray() en Java
  3. Convertir InputStream en byte array usando el método write() en Java
  4. Convierte InputStream en byte array usando el método readAllBytes() en Java
  5. Convertir InputStream en byte array usando el método readFully() en Java
  6. Convertir InputStream a byte array usando el método getBytes() en Java
  7. Convertir InputStream en byte array usando el código personalizado en Java
  8. Convertir InputStream en byte array usando el método toByteArray() en Java
Convertir InputStream en byte array en Java

Este tutorial introduce cómo convertir InputStream en byte array en Java y enumera algunos códigos de ejemplo para comprender el tema.

InputStream es una clase y superclase abstracta de todas las clases que representan un flujo de entrada de bytes. Java utiliza un flujo de entrada para leer datos de cualquier fuente como un archivo, un array, etc. A continuación veremos cómo convertir este flujo en byte array utilizando algunos métodos incorporados y código personalizado en Java.

En este artículo, usaremos varios métodos incorporados como toByteArray(), readAllBytes(), readFully(), getBytes(), write(), etc. y un archivo de texto abc.txt se usa para leer datos. Este archivo de texto contiene una sola frase, Welcome to Delfstack, que será leída y convertida en byte array, que a su vez puede ser convertida en una cadena para comprobar el resultado deseado.

Convertir InputStream en byte array usando el método readAllBytes() en Java

Podemos usar el método readAllBytes() para meter todos los datos en byte array. Este método devuelve byte array que puede ser pasada al constructor String para imprimir datos textuales.

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

Producción :

Welcome to Delfstack

Convertir InputStream en byte array usando el método toByteArray() en Java

Si trabajas con la biblioteca Apache, puedes usar el método toByteArray() de la clase IOUtils para meter todos los datos en el array de bytes. Este método devuelve byte array que puede ser pasada al constructor String para imprimir los datos de texto.

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

Producción :

Welcome to Delftstack

Convertir InputStream en byte array usando el método write() en Java

Podemos usar el método write() de la clase ByteArrayOutputStream para obtener todos los datos en byte array. Este método devuelve byte array que puede ser pasada al constructor String para imprimir datos textuales.

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

Producción :

Welcome to Delfstack

Convierte InputStream en byte array usando el método readAllBytes() en Java

Podemos usar el método readAllBytes() de la clase DataInputStream para convertir todos los datos en byte array. Este método devuelve byte array que puede ser pasada al constructor String para imprimir datos textuales.

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

Producción :

Welcome to Delftstack

Convertir InputStream en byte array usando el método readFully() en Java

Podemos usar el método readFully() de la clase RandomAccessFile para convertir todos los datos en byte array. Este método devuelve byte array, que puede ser pasada al constructor String para imprimir datos textuales.

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

Producción :

Welcome to Delfstack

Convertir InputStream a byte array usando el método getBytes() en Java

Podemos usar el método getBytes() de la clase String para convertir todos los datos en byte array. Este método devuelve byte array que puede ser pasada al constructor String para imprimir datos textuales.

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

Producción :

Welcome to Delftstack

Convertir InputStream en byte array usando el código personalizado en Java

Si no quieres usar ningún método incorporado, usa este código personalizado para convertir Inputstream en byte array. Este código devuelve byte array que puede ser pasada al constructor String para imprimir datos textuales.

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

Producción :

Welcome to Delfstack

Convertir InputStream en byte array usando el método toByteArray() en Java

Podemos usar el método toByteArray() de la clase ByteArrayOutputStream para convertir todos los datos en byte array. Este método devuelve byte array que puede ser pasada al constructor String para imprimir datos textuales.

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

Producción :

Welcome to Delfstack

Artículo relacionado - Java IO