2

このコードでインフレエラー-3が発生し続けます。さまざまなバージョンの libz を試しました。私は試しlibz.dylibてみましたが、試してみましたlibz.1.2.5.dylib何か提案はありますか?

NSData *originalData = [@"Look out! It's..." dataUsingEncoding:NSUTF8StringEncoding];
//use Godzippa to compressed
NSData *compressedData = [originalData dataByGZipCompressingWithError:nil];
//use ObjectiveZlib to decompressed
NSData *decompressedData = [NSData dataByDecompressingData:compressedData];

編集

これを新しいプロジェクトで機能させました。ここで、php Web サーバーから受け取った gz ファイルを解凍する必要があります。上記からエラーが発生しますdataByDecompressingData:] [Line 94] inflate error: -3

NSData *originalData = [@"Look out! It's..." dataUsingEncoding:NSUTF8StringEncoding];
// use ObjectiveZlib to compress
NSData *compressedData2 = [NSData dataByCompressingData:originalData];
//use ObjectiveZlib to decompressed
NSData *decompressedData2 = [NSData dataByDecompressingData:compressedData];
NSLog(@"%@", [NSString stringWithUTF8String:[decompressedData2 bytes]]);
4

2 に答える 2

3

ObjectiveZlib は、 gzip形式ではなく、zlib形式に圧縮および解凍します。gzip ストリームを ObjectiveZlib デコンプレッサにフィードしようとすると、適切に拒否されます。

ObjectiveZlib ソース コードを変更して、独自の ObjectiveGzip を作成できます。変化する:

deflateInit(&stream, Z_DEFAULT_COMPRESSION)

に:

deflateInit2(&stream, Z_DEFAULT_COMPRESSION, Z_DEFLATED, 15+16, 8,
             Z_DEFAULT_STRATEGY)

inflateInit(&stream)

に:

inflateInit2(&stream, 15+16)

どちらの15+16場合も、zlib が zlib 形式ではなく gzip 形式を使用するように要求します。代わりに使用するinflateInit2場合15+32、zlib 形式か gzip 形式かを自動検出し、それに応じてデコードします。

于 2012-09-19T01:39:30.630 に答える
0

私は実際にGZIPを使用することになり、Webサーバーからダウンロードしたgzipファイルをgunzipで圧縮できます。

于 2012-09-18T20:50:39.510 に答える