Converti Inputstream in Byte Array in Java

Mohammad Irfan 12 ottobre 2023
  1. Converti InputStream in Byte Array usando il metodo readAllBytes() in Java
  2. Converti InputStream in Byte Array usando il metodo toByteArray() in Java
  3. Converti InputStream in Byte Array usando il metodo write() in Java
  4. Converti InputStream in Byte Array usando il metodo readAllBytes() in Java
  5. Converti InputStream in Byte Array usando il metodo readFully() in Java
  6. Converti InputStream in Byte Array usando il metodo getBytes() in Java
  7. Converti InputStream in Byte Array utilizzando il codice personalizzato in Java
  8. Converti InputStream in Byte Array usando il metodo toByteArray() in Java
Converti Inputstream in Byte Array in Java

Questo tutorial introduce come convertire inputstream in array di byte in Java ed elenca alcuni codici di esempio per comprendere l’argomento.

InputStream è una classe astratta e una superclasse di tutte le classi che rappresentano un flusso di input di byte. Java utilizza un flusso di input per leggere i dati da qualsiasi origine come file, array, ecc. Vedremo quindi come convertire questo flusso in array di byte utilizzando alcuni metodi incorporati e codice personalizzato in Java.

In questo articolo, useremo diversi metodi incorporati come toByteArray(), readAllBytes(), readFully(), getBytes(), write(), ecc e un file di testo abc.txt viene utilizzato per leggere i dati. Questo file di testo contiene una singola frase, Welcome to Delfstack, che verrà letta e convertita in un array di byte, che ulteriormente può essere convertito in una stringa per verificare il risultato desiderato.

Converti InputStream in Byte Array usando il metodo readAllBytes() in Java

Possiamo usare il metodo readAllBytes() per ottenere tutti i dati in un array di byte. Questo metodo restituisce un array di byte che può essere passato ulteriormente nel costruttore String per stampare dati testuali.

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

Produzione:

Welcome to Delfstack

Converti InputStream in Byte Array usando il metodo toByteArray() in Java

Se lavori con la libreria Apache, puoi usare il metodo toByteArray() della classe IOUtils per ottenere tutti i dati nell’array di byte. Questo metodo restituisce un array di byte che può essere passato ulteriormente nel costruttore String per stampare i dati testuali.

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

Produzione:

Welcome to Delftstack

Converti InputStream in Byte Array usando il metodo write() in Java

Possiamo usare il metodo write() della classe ByteArrayOutputStream per ottenere tutti i dati in un array di byte. Questo metodo restituisce un array di byte che può essere passato al costruttore String per stampare dati testuali.

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

Produzione:

Welcome to Delfstack

Converti InputStream in Byte Array usando il metodo readAllBytes() in Java

Possiamo usare il metodo readAllBytes() della classe DataInputStream per convertire tutti i dati in un array di byte. Questo metodo restituisce un array di byte che può essere passato ulteriormente nel costruttore String per stampare dati testuali.

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

Produzione:

Welcome to Delftstack

Converti InputStream in Byte Array usando il metodo readFully() in Java

Possiamo usare il metodo readFully() della classe RandomAccessFile per convertire tutti i dati in un array di byte. Questo metodo restituisce un array di byte, che può essere passato al costruttore String per stampare dati testuali.

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

Produzione:

Welcome to Delfstack

Converti InputStream in Byte Array usando il metodo getBytes() in Java

Possiamo usare il metodo getBytes() della classe String per convertire tutti i dati in un array di byte. Questo metodo restituisce un array di byte che può essere passato ulteriormente nel costruttore String per stampare dati testuali.

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

Produzione:

Welcome to Delftstack

Converti InputStream in Byte Array utilizzando il codice personalizzato in Java

Se non si desidera utilizzare alcun metodo integrato, utilizzare questo codice personalizzato per convertire inputstream in un array di byte. Questo codice restituisce un array di byte che può essere passato ulteriormente nel costruttore String per stampare dati testuali.

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

Produzione:

Welcome to Delfstack

Converti InputStream in Byte Array usando il metodo toByteArray() in Java

Possiamo usare il metodo toByteArray() della classe ByteArrayOutputStream per convertire tutti i dati in un array di byte. Questo metodo restituisce un array di byte che può essere passato ulteriormente nel costruttore String per stampare dati testuali.

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

Produzione:

Welcome to Delfstack

Articolo correlato - Java IO