2013-04-24 2 views
0

Gzip 압축 해제 문제가 있습니다.Gzip 형식의 압축을 해제 하시겠습니까?

상황은 이와 같습니다. UTF-8 형식의 텍스트가 있습니다. 이제이 텍스트는 PHP에서 gzdeflate() 함수를 사용하여 압축 된 다음 Mysql의 blob 객체에 저장됩니다.

이제 blob 객체를 가져 와서 Java의 Gzip Stream을 사용하여 압축을 해제했습니다. 그러나 GZIP 형식이 아니라는 오류가 발생합니다.

심지어 자바에서 Inflater를 사용하여 동일한 작업을 수행했지만 이제는 "DataFormatException : 잘못된 헤더 검사"가 발생합니다. 인플레이터의 코드는 다음과 같습니다.

//rs is the resultset 
//blobAsBytes is the byte array 
while(rs.next()){ 
     blob = rs.getBlob("old_text"); 
     int blobLength = (int) blob.length(); 
     blobAsBytes = blob.getBytes(1, blobLength); 
    } 

    Inflater decompresser = new Inflater(); 
    decompresser.setInput(blobAsBytes); 
    byte[] result = new byte[100]; 
    int resultLength = decompresser.inflate(result); // this is the line where the exception is occurring. 
    decompresser.end(); 

    // Decode the bytes into a String 
    String outputString = new String(result, 0, resultLength, "UTF-8"); 
    System.out.println(outputString); 

Java를 사용하여이 작업을 수행하고 데이터베이스에 저장된 모든 텍스트를 다시 가져와야합니다.

누군가 나를 도와주세요.

답변

1

gzencode()이 아니라 gzdeflate()을 사용하십시오. 후자는 gzip 형식을 생성하지 않으며, 압축 형식을 생성합니다. 이전 이 gzip 형식을 생성합니다. PHP 함수는 끔찍하고 혼란스럽게 이름 지어졌습니다.

또는 생성자에서 nowrap이 true 인 java.util.zip.Inflater 클래스를 사용하십시오. 그러면 Java 끝 부분에서 압축되지 않은 데이터가 디코딩됩니다.

+0

좋아,하지만 여기에 나는 이미 gzdeflate() 함수를 사용하여 압축 된 데이터를 가지고 있으며 데이터베이스에 저장되어있다. –

+0

좋아, 흥미 롭지 만 여기서 데이터는 이미 gzdeflate() 함수를 사용하여 압축되어 있고 데이터베이스에 저장되어있다. 내 요구 사항은 이미 저장된 데이터를 얻는 것입니다. 나는 PHP의 gzinflate() 함수를 사용해 보았지만 정상적으로 작동하지만 Java에 관해서는 모두 데이터를 검색하지 못했습니다. –

+0

확장 된 대답을 참조하십시오. –

관련 문제