2010-12-30 1 views
0

.NET의 GzipStream은 zlib 기반 qCompress/qUncompress와 호환됩니까? 그들은 모두 수축 알고리즘을 사용한다고 생각합니다. 그래서 .NET의 DeflateStream이나 GzipStream을 사용하여 Qt의 qCompress가 작성한 데이터를 읽고 zlib을 전체적으로 다시 구현하지 않고 Qt의 qUncompress가 읽을 수있는 데이터를 쓸 수 있습니까?.NET의 GzipStream은 Qt의 zlib 기반 qCompress/qUncompress와 호환됩니까?

답변

2

나는 의심 스럽다. 첫째, qCompress()는 zlib 표준과 아무 관련이없는 처음 4 바이트에 데이터 크기를 넣습니다. 이러한 바이트는 건너 뛸 수 있지만 더러운 해킹입니다. 둘째로, gzipStream은 qCompress()가 메모리 내 압축을 위해 설계된 다른 zlib 형식을 사용하는 compress2() 호출을 사용할 때 Gzip 형식 (파일 압축 용으로 설계된 zlib 형식)을 읽는 것처럼 들립니다.

qCompress() 및 qUncompress()는 서로 작동하도록 설계되었습니다. 다른 코드와의 호환성이 필요하면 zlib을 직접 사용하십시오. 쉽고 휴대가 편리합니다. 사실, 우리 회사에서하고 있습니다. 서버는 Qt를 사용하고 클라이언트는 .NET과 Java를 사용합니다. 완벽하게 작동합니다.

+0

.NET 및 Java 용 zlib의 구현에는 어떤 것이 있습니까? ZLIB.NET (http://www.componentace.com/zlib_.NET.htm)에 대해 알고 있지만 Java에 대해서는 무엇이 있습니까? .NET 및 Java에서 zlib 지원을위한 사실상의 표준 라이브러리는 무엇입니까? –

+0

Java 용 [JZlib] (http://www.jcraft.com/jzlib/)을 사용하면 문제가 없습니다. 지원이 다소 지연 될 수 있습니다. 플러시 할 내용을 작성해야합니다 (0 크기의 바이트 배열은 ' 쓰지 않는 한 아무것도하지 않습니다.) 나 .Net 개발자가 아니기 때문에 .Net에 관해 모르십시오. –

+0

사이드 노트 : ZLIB.NET은 qCompress/qUncompress와 호환된다는 것을 알았습니다. .NET의 DeflateStream과 GzipStream은 그렇지 않습니다. 압축 및 압축 해제시 압축되지 않은 길이를 지정하는 처음 4 바이트를 추가하고 제거하십시오. –