Mi objetivo es codificar un archivo y comprimirlo en una carpeta en java. Tengo que usar la biblioteca Apache's Commons-codec. Puedo codificar y comprimirlo y funciona bien, pero cuando lo decodifico de nuevo a su forma original, parece que el archivo no se ha codificado por completo. Parece que faltan algunas partes. ¿Alguien puede decirme por qué sucede esto?Base64-codificar un archivo y comprimirlo
También estoy adjuntando la parte de mi código como referencia para que pueda guiarme en consecuencia.
private void zip() {
int BUFFER_SIZE = 4096;
byte[] buffer = new byte[BUFFER_SIZE];
try {
// Create the ZIP file
String outFilename = "H:\\OUTPUT.zip";
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
outFilename));
// Compress the files
for (int i : list.getSelectedIndices()) {
System.out.println(vector.elementAt(i));
FileInputStream in = new FileInputStream(vector.elementAt(i));
File f = vector.elementAt(i);
// Add ZIP entry to output stream.
out.putNextEntry(new ZipEntry(f.getName()));
// Transfer bytes from the file to the ZIP file
int len;
while ((len = in.read(buffer)) > 0) {
buffer = org.apache.commons.codec.binary.Base64
.encodeBase64(buffer);
out.write(buffer, 0, len);
}
// Complete the entry
out.closeEntry();
in.close();
}
// Complete the ZIP file
out.close();
} catch (IOException e) {
System.out.println("caught exception");
e.printStackTrace();
}
}
¿Puede proporcionar algunas muestras que muestren lo que puso, lo que salió y lo que esperaba obtener? – Anonymoose
No creo que tenga nada que ver con su problema, pero su prueba 'in.read' probablemente debería ser' in.read (buffer)} -1', ya que eso es lo que indica el api javadoc. Javadoc no dice que '0' significa fin de secuencia. http://docs.oracle.com/javase/1.4.2/docs/api/java/io/InputStream.html # read% 28byte []% 29 –
Si nuestros corazones son puros, podemos eliminar a base64 en nuestra vida. –