2013-12-21 370 views
3

我需要在文件上保存字符串,並使用DeflaterOutputStream進行壓縮。當我嘗試解壓縮時,我無法獲取原始字符串。我得到一個未清除的符號。 她是我的代碼:在java中使用DeflaterOutputStream和InflaterInputStream對字符串進行壓縮和解壓縮

public static void decompress() throws Exception { 
    InputStream in=new FileInputStream("E:/codes.txt"); 
    InflaterInputStream ini = new InflaterInputStream(in); 
    ByteArrayOutputStream bout =new ByteArrayOutputStream(512); 
    int b; 
    while ((b = in.read()) != -1) { 
      bout.write(b); 
    } 
    ini.close(); 
    bout.close(); 
    String s=new String(bout.toByteArray()); 
    System.out.print(s); 
} 

public static void compressData(byte[] data) throws Exception { 
    OutputStream out=new FileOutputStream("E:/test.txt"); 
    Deflater d = new Deflater(); 
    DeflaterOutputStream dout = new DeflaterOutputStream(out, d); 
    dout.write(data); 
    dout.close(); 
} 
public static void main(String[] args) throws Exception { 
    compressData("My name is Motasem".getBytes()); 
    decompress(); 

} 

我不知道到底在哪問題。我雖然它在轉換字節數組爲字符串,但我試過了,它正在工作。你可以查看這個網站http://www.mkyong.com/java/how-do-convert-byte-array-to-string-in-java/

+1

你寫爲 「E:/test.txt」;你從「E:/codes.txt」中讀取。 – McDowell

+0

@McDowell你是對的:D –

回答

5

你有一個簡單但很難發現的錯誤。您實際上並未使用InflaterInputStream來讀取數據。你只是打開和關閉它。您的代碼讀取該文件是:

while ((b = in.read()) != -1) { 

應該

while ((b = ini.read()) != -1) { 
+0

:d非常感謝 –

相關問題