void ReloadStreams() { dataOutput = new DataOutput(new AmfWriter(memoryStream, serializationContext, objectEncoding)); dataInput = new DataInput(new AmfReader(memoryStream, serializationContext)); }
public void Compress(CompressionAlgorithm algorithm) { var buffer = memoryStream.ToArray(); memoryStream.Close(); var ms = new MemoryStream(); var stream = algorithm == CompressionAlgorithm.Zlib ? new ZlibStream(ms, CompressionMode.Compress, true) : new DeflateStream(ms, CompressionMode.Compress, true); using (stream) stream.Write(buffer, 0, buffer.Length); memoryStream = ms; dataOutput = new DataOutput(new AmfWriter(memoryStream, serializationContext)); dataInput = new DataInput(new AmfReader(memoryStream, serializationContext)); }
public void Uncompress(CompressionAlgorithm algorithm) { Position = 0; var ms = new MemoryStream(); var buffer = new byte[1024]; // The zlib format is specified by RFC 1950. Zlib also uses deflate, plus 2 or 6 header bytes, and a 4 byte checksum at the end. // The first 2 bytes indicate the compression method and flags. If the dictionary flag is set, then 4 additional bytes will follow. // Preset dictionaries aren't very common and we don't support them var deflateStream = algorithm == CompressionAlgorithm.Zlib ? new ZlibStream(memoryStream, CompressionMode.Decompress, false) : new DeflateStream(memoryStream, CompressionMode.Decompress, false); while (true) { var readCount = deflateStream.Read(buffer, 0, buffer.Length); if (readCount == 0) break; ms.Write(buffer, 0, readCount); } memoryStream.Dispose(); memoryStream = ms; memoryStream.Position = 0; dataOutput = new DataOutput(new AmfWriter(memoryStream, serializationContext)); dataInput = new DataInput(new AmfReader(memoryStream, serializationContext)); }