Convertir un InputStream en una cadena en Java

Rupam Yadav 12 octubre 2023
  1. Usar la API de Stream para convertir un InputStream en una cadena
  2. Usa ByteArrayOutputStream para leer o convertir un InputStream en cadena
  3. Usa IOUtils.toString de Apache Commons para leer o convertir un InputStream en un String
Convertir un InputStream en una cadena en Java

En este tutorial, hablaremos de cómo convertir un InputStream en un String en Java. Un InputStream es un flujo de bytes que puede ser utilizado para realizar varias tareas como la lectura. En general, es una clase que contiene todo en bytes. Si queremos convertir este flujo de bytes en cualquier otro tipo de datos, es posible que tengamos que utilizar métodos específicos.

Aquí veremos las diferentes formas en que podemos leer o convertir un InputStream en una cadena en Java.

Usar la API de Stream para convertir un InputStream en una cadena

Podemos convertir un InputStream en una cadena usando la API Stream que es parte de Java 8. InputStreamReader lee el InputStream y el BufferedReader().lines() nos ayuda a convertir este InputStream en un flujo de String. Como podemos ver, Collectors.joining() se utiliza para unir todas las cadenas del flujo y luego devolver una sola cadena.

package com.company;

import java.io.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.commons.io.IOUtils;

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

Resultado:

This is a sample text file

Usa ByteArrayOutputStream para leer o convertir un InputStream en cadena

Sabemos que un InputStream está compuesto de bytes, y por lo tanto podemos hacer una clase ByteArrayOutputStream que convierte el readInputStream en un array de bytes. Después de eso, podemos convertir este array de bytes en una cadena usando 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();
    }
  }
}

Resultado:

This is a sample text file

Usa IOUtils.toString de Apache Commons para leer o convertir un InputStream en un String

Para facilitarnos la tarea, podemos usar la función IOUtils.toString incluida en la biblioteca de Apache Commons. Para usar la biblioteca Apache Commons, podemos incluir esta dependencia en nuestro proyecto.

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

En el siguiente ejemplo, primero, creamos un InputStream que es un archivo de texto, y luego llamamos al método IOUtils.toString() que toma un InputStream y la codificación a usar para convertir el flujo. Estamos usando la codificación UTF-8, que es usada universalmente.

package com.company;

import java.io.*;
import org.apache.commons.io.IOUtils;

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

Resultado:

This is a sample text file
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

Artículo relacionado - Java String

Artículo relacionado - Java IO