.NetとMonoで実行する特別なZLib実装を実装する必要があります。 データ/文字列メッセージがソケット経由で受信されたため、チェックサムがありません。 これは未処理の文字列データであり、ファイルに関するものではありません。既知のチェックサムなしのMono/.Net用Zlib
unsigned char zlib_header[]={
// custom additional Zlib Id
'Z', // Our own ID
// The normal GZIP header
0x1f,
0x8b, // GZIP ID
0x08, // Deflated
0x00, // Flags
0, 0, 0, 0, // Timestamp,
0x00, // Extra flags
0x00, // OS identifier
// afterwards compressed data without a checksum
};
私はGZipStreamとDeflateStreamでデータを解凍しようとしましたが、私はGZStreamが見つからないため、チェックサムの失敗だと思います。私はまた様々なオフセットを試みたが運がなかった。 データはソケット経由で受信されるため、チェックサムは使用されません。したがって、ZLibチェックサムは追加のオーバーヘッドになります。 チェックサムを追加して適切なライブラリを呼び出す方法を教えてください。またはMonoと.Netをサポートするサードパーティのライブラリを見てください。 編集:パフォーマンスは少なくとも1秒に1回は非常に重要です。 C-LibをInterop経由で使用することを最後にお勧めしますか? 私は現時点で常に無効なデータ例外を受け取り、間違ったチェックサムに関係していると考えます。 これは私が成功せず使用しようとした実際のコードです:
const int HeaderSize = 1;
System.IO.MemoryStream ms = new System.IO.MemoryStream(compressedBuffer, HeaderSize, compressedBuffer.Length-HeaderSize);//remove the additional Z from the header
GZipStream zipStream = new GZipStream(ms, CompressionMode.Decompress,true);
byte[] deCompressedBytes = new byte[actualBufferLength* 10];
int resultSize=zipStream.Read(deCompressedBytes, 0, actualBufferLength);//get rid of the header
UTF8Encoding enc = new UTF8Encoding();
string result = enc.GetString(deCompressedBytes, 0, resultSize);
私は離れた場所から第三者と統合しており、明らかにソフトウェア内部にバグがあります。ネットワークストリームを正しくフラッシュしていません。とにかく助けてくれてありがとう。 – weismat