我的目標是對文件進行編碼並將其壓縮到java文件夾中。我必須使用Apache的Commons-codec庫。我能夠編碼和壓縮它,它工作正常,但是當我解碼它回到它的原始形式,它看起來像文件尚未完全編碼。看起來有幾個部分不見了。有人能告訴我爲什麼會發生這種情況嗎?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 2012-03-13 09:25:17
我不認爲它與你的問題有任何關係,但是你的'in.read'測試應該是in.read(buffer)> -1',因爲這就是javadoc所說的。 javadoc沒有說'0'表示流結束。 http://docs.oracle.com/javase/1.4。2/docs/api/java/io/InputStream.html#read%28byte []%29 – 2012-03-13 09:25:23
如果我們的心是純淨的,我們可以在我們的有生之年剔除base64。 – 2012-03-13 09:28:17