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(); } } |
¿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.Files
– toByteArray()
. Vea algunos ejemplos aquí.
Referencias:
1. ByteArrayOutputStream Java Doc
2. FileOutputStream Java Doc