Моя цель - закодировать файл и закрепить его в папке в java. Я должен использовать библиотеку Commons-codec Apache. Я могу кодировать и zip его, и он отлично работает, но когда я декодирую его обратно в исходную форму, похоже, что файл не был полностью закодирован. Похоже, что некоторые части отсутствуют. Может ли кто-нибудь сказать мне, почему это происходит?Base64-кодировать файл и сжимать его
Я также прикрепляю часть моего кода для справки, чтобы вы могли вести меня соответствующим образом.
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();
}
}
Можете ли вы предоставить несколько образцов, которые показывают, что вы положили, что вы выбрали, и что вы ожидали выйти? – Anonymoose
Я не думаю, что это имеет какое-либо отношение к вашей проблеме, но ваш тест 'in.read', вероятно, должен быть' in.read (buffer)> -1', поскольку это то, что утверждает api javadoc. В javadoc не говорится, что '0' означает конец потока. http://docs.oracle.com/javase/1.4.2/docs/api/java/io/InputStream.html # read% 28byte []% 29 –
Если наши сердца чисты, мы можем искоренить base64 в нашей жизни. –