Categorías
Real Methods

Java: convierta un archivo en una matriz de bytes, luego convierta la matriz de bytes en un archivo.

En esta publicación, le mostraré cómo convertir un archivo en una matriz de bytes y luego convertir una matriz de bytes en un archivo.

Para convertir un archivo en una matriz de bytes, se usa la clase ByteArrayOutputStream. Esta clase implementa un flujo de salida en el que los datos se escriben en una matriz de bytes. El búfer crece automáticamente a medida que se escriben datos en él. Los datos se pueden recuperar usando toByteArray () y toString ().

Para convertir la matriz de bytes de nuevo al archivo original, se usa la clase FileOutputStream. Un flujo de salida de archivo es un flujo de salida para escribir datos en un archivo o en un descriptor de archivo.

El siguiente código ha sido completamente probado.

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
 
public class genFile {
 
    public static void main(String[] args) throws FileNotFoundException, IOException {
        File file = new File("java.pdf");
 
        FileInputStream fis = new FileInputStream(file);
        //System.out.println(file.exists() + "!!");
        //InputStream in = resource.openStream();
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        byte[] buf = new byte[1024];
        try {
            for (int readNum; (readNum = fis.read(buf)) != -1;) {
                bos.write(buf, 0, readNum); //no doubt here is 0
                //Writes len bytes from the specified byte array starting at offset off to this byte array output stream.
                System.out.println("read " + readNum + " bytes,");
            }
        } catch (IOException ex) {
            Logger.getLogger(genJpeg.class.getName()).log(Level.SEVERE, null, ex);
        }
        byte[] bytes = bos.toByteArray();
 
        //below is the different part
        File someFile = new File("java2.pdf");
        FileOutputStream fos = new FileOutputStream(someFile);
        fos.write(bytes);
        fos.flush();
        fos.close();
    }
}
  Descomprima un archivo .jar en un programa Java

¿Por qué alguien querría convertir un archivo en una matriz de bytes?

Hay varias aplicaciones de esta conversión. Por ejemplo, convierta el archivo en byte para guardarlo en la base de datos, transfiera el archivo a otro sistema usando el servicio web, etc.

Del mismo modo, puede convertir una imagen en una matriz de bytes, consulte esta publicación.

ACTUALIZACIÓN (16/12/2015):
Existe un método muy conveniente de com.google.common.io.FilestoByteArray(). Vea algunos ejemplos aquí.

Referencias:

1. ByteArrayOutputStream Java Doc
2. FileOutputStream Java Doc

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *