2014-04-07 2 views
1

다음 코드를 사용하여 압축 한 후 압축을 풉니 다. 그러나 압축 해제 후 다른 길이의 문자열이 표시되고 압축 해제 된 문자열에서 몇 개의 문자가 누락됩니다.GZIP 압축 및 압축 해제

압축 :

  ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      GZIPOutputStream zos = new GZIPOutputStream(baos); 

      zos.write(text.getBytes()); 
      zos.finish(); 
      zos.flush(); 

      byte[] udpBuffer = baos.toByteArray();   
      System.out.println("Compressed length: " + udpBuffer.length); 

감압 :

 GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(bytes)); 
     BufferedReader br = new BufferedReader(new InputStreamReader(gis));  

     StringBuilder sb = new StringBuilder(); 
     while (br.readLine()!= null) { 
      sb.append(br.readLine()); 
     } 

     System.err.println(sb.toString()); 

텍스트 원래 길이 : 45,627 바이트
텍스트 압축 길이 : 3732 바이트
텍스트 압축 길이 : 20,328 바이트 (같아야한다 원본 길이)

내 원래 텍스트는 다음과 같이이다 :

<html> 
<head> 
    <title></title> 
</head> 
<body> 
<p><span class="preheader" style="display:none!important;mso-hide:all">Hey wazzup? </span></p> 

<table align="center" border="0" cellpadding="0" cellspacing="0" width="640"> 
    <tbody> 
     <tr> 
      <td align="center" height="30" style="font-size:11px;color:#333;font-family:Verdana,Geneva,sans-serif"> 
. 
. 
. 
</tbody> 
</body> 
</html> 

그리고 내 압축 해제 텍스트가 시작 태그가없는 참조 (같은오고, 또한

<title> tag, similarly many tags and other parts are missing from my uncompressed text: 
<head></head><p><span class="preheader" style="display:none!important;mso-hide:all"> 
. 
. 
. 

사람은 실수를 지적 할 수 있습니까? 아니면 이것은 예상 된 행동입니까?

답변

1

변경

while (br.readLine()!= null) { 
    sb.append(br.readLine()); 
} 

또한

String line; 
while ((line = br.readLine()) != null) { 
    sb.append(line); 
} 

에, zos.flush은() zos.finish 전()를 호출해야합니다.

+0

작업을 수행했습니다! 감사! 그러나 첫 번째 버전에서 무엇이 잘못 되었습니까? – Arry

+1

"while (br.readLine()! = null)"은 행을 읽고 행이 null인지 여부를 확인합니다. "sb.append (br.readLine())"는 NEXT 행을 읽고이를 StringBuilder에 추가합니다. "while (br.readLine()! = null)"에서 읽은 행은 StringBuilder에 추가되지 않고 간단히 버려집니다. –