我想寫一個可以壓縮數據的類。下面的代碼失敗(不會引發異常,但目標.gz文件爲空)。
此外:我不想直接生成.gz文件,因爲它在所有示例中都是這樣。我只想得到壓縮的 數據,以便我可以例如在將數據寫入文件之前對其進行加密。GZIP壓縮到一個字節數組
如果我直接寫一個文件,一切工作正常:
import java.io.*;
import java.util.zip.*;
import java.nio.charset.*;
public class Zipper
{
public static void main(String[] args)
{
byte[] dataToCompress = "This is the test data."
.getBytes(StandardCharsets.ISO_8859_1);
GZIPOutputStream zipStream = null;
FileOutputStream fileStream = null;
try
{
fileStream = new FileOutputStream("C:/Users/UserName/Desktop/zip_file.gz");
zipStream = new GZIPOutputStream(fileStream);
zipStream.write(dataToCompress);
fileStream.write(compressedData);
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
try{ zipStream.close(); }
catch(Exception e){ }
try{ fileStream.close(); }
catch(Exception e){ }
}
}
}
但是,如果我想「旁路」它的字節數組流也不會產生一個單字節 - compressedData
總是空。
import java.io.*;
import java.util.zip.*;
import java.nio.charset.*;
public class Zipper
{
public static void main(String[] args)
{
byte[] dataToCompress = "This is the test data."
.getBytes(StandardCharsets.ISO_8859_1);
byte[] compressedData = null;
GZIPOutputStream zipStream = null;
ByteArrayOutputStream byteStream = null;
FileOutputStream fileStream = null;
try
{
byteStream = new ByteArrayOutputStream(dataToCompress.length);
zipStream = new GZIPOutputStream(byteStream);
zipStream.write(dataToCompress);
compressedData = byteStream.toByteArray();
fileStream = new FileOutputStream("C:/Users/UserName/Desktop/zip_file.gz");
fileStream.write(compressedData);
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
try{ zipStream.close(); }
catch(Exception e){ }
try{ byteStream.close(); }
catch(Exception e){ }
try{ fileStream.close(); }
catch(Exception e){ }
}
}
}
「*以下代碼失敗*」不是有效的Java錯誤消息。 – 2013-02-08 17:13:30
也請包括來自錯誤的堆棧跟蹤。 – 2013-02-08 17:15:19
它只是生成一個不是ZIP文件的文件。沒有錯誤消息。 – 2013-02-08 17:17:24