/// <summary> /// Initializes a new instance of the ByteArray class. /// </summary> public ByteArray() { _memoryStream = new MemoryStream(); AMFReader amfReader = new AMFReader(_memoryStream); AMFWriter amfWriter = new AMFWriter(_memoryStream); _dataOutput = new DataOutput(amfWriter); _dataInput = new DataInput(amfReader); _objectEncoding = ObjectEncoding.AMF3; }
/// <summary> /// Compresses the byte array using zlib compression. The entire byte array is compressed. /// </summary> /// <param name="algorithm">The compression algorithm to use when compressing. Valid values are defined as constants in the CompressionAlgorithm class. The default is to use zlib format.</param> /// <remarks> /// After the call, the Length property of the ByteArray is set to the new length. The position property is set to the end of the byte array. /// </remarks> public void Compress(string algorithm) { ValidationUtils.ArgumentConditionTrue(algorithm == CompressionAlgorithm.Deflate || algorithm == CompressionAlgorithm.Zlib, "algorithm", "Invalid parameter"); #if SILVERLIGHT throw new NotSupportedException(); #else if (algorithm == CompressionAlgorithm.Deflate) { byte[] buffer = _memoryStream.ToArray(); MemoryStream ms = new MemoryStream(); DeflateStream deflateStream = new DeflateStream(ms, CompressionMode.Compress, true); deflateStream.Write(buffer, 0, buffer.Length); deflateStream.Close(); _memoryStream.Close(); _memoryStream = ms; AMFReader amfReader = new AMFReader(_memoryStream); AMFWriter amfWriter = new AMFWriter(_memoryStream); _dataOutput = new DataOutput(amfWriter); _dataInput = new DataInput(amfReader); } if (algorithm == CompressionAlgorithm.Zlib) { byte[] buffer = _memoryStream.ToArray(); MemoryStream ms = new MemoryStream(); ZlibStream zlibStream = new ZlibStream(ms, CompressionMode.Compress, true); zlibStream.Write(buffer, 0, buffer.Length); zlibStream.Flush(); zlibStream.Close(); zlibStream.Dispose(); _memoryStream.Close(); _memoryStream = ms; AMFReader amfReader = new AMFReader(_memoryStream); AMFWriter amfWriter = new AMFWriter(_memoryStream); _dataOutput = new DataOutput(amfWriter); _dataInput = new DataInput(amfReader); } #endif }
/// <summary> /// Decompresses the byte array. The byte array must have been previously compressed with the Compress() method. /// </summary> /// <param name="algorithm">The compression algorithm to use when decompressing. This must be the same compression algorithm used to compress the data. Valid values are defined as constants in the CompressionAlgorithm class. The default is to use zlib format.</param> public void Uncompress(string algorithm) { ValidationUtils.ArgumentConditionTrue(algorithm == CompressionAlgorithm.Deflate || algorithm == CompressionAlgorithm.Zlib, "algorithm", "Invalid parameter"); #if SILVERLIGHT throw new NotSupportedException(); #else if (algorithm == CompressionAlgorithm.Zlib) { //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 Position = 0; ZlibStream deflateStream = new ZlibStream(_memoryStream, CompressionMode.Decompress, false); MemoryStream ms = new MemoryStream(); byte[] buffer = new byte[1024]; // Chop off the first two bytes //int b = _memoryStream.ReadByte(); //b = _memoryStream.ReadByte(); while (true) { int readCount = deflateStream.Read(buffer, 0, buffer.Length); if (readCount > 0) ms.Write(buffer, 0, readCount); else break; } deflateStream.Close(); _memoryStream.Close(); _memoryStream.Dispose(); _memoryStream = ms; _memoryStream.Position = 0; } if (algorithm == CompressionAlgorithm.Deflate) { Position = 0; DeflateStream deflateStream = new DeflateStream(_memoryStream, CompressionMode.Decompress, false); MemoryStream ms = new MemoryStream(); byte[] buffer = new byte[1024]; while (true) { int readCount = deflateStream.Read(buffer, 0, buffer.Length); if (readCount > 0) ms.Write(buffer, 0, readCount); else break; } deflateStream.Close(); _memoryStream.Close(); _memoryStream.Dispose(); _memoryStream = ms; _memoryStream.Position = 0; } AMFReader amfReader = new AMFReader(_memoryStream); AMFWriter amfWriter = new AMFWriter(_memoryStream); _dataOutput = new DataOutput(amfWriter); _dataInput = new DataInput(amfReader); #endif }
/// <summary> /// Compresses the byte array using zlib compression. The entire byte array is compressed. /// </summary> /// <param name="algorithm">The compression algorithm to use when compressing. Valid values are defined as constants in the CompressionAlgorithm class. The default is to use zlib format.</param> /// <remarks> /// After the call, the Length property of the ByteArray is set to the new length. The position property is set to the end of the byte array. /// </remarks> public void Compress(string algorithm) { ValidationUtils.ArgumentConditionTrue(algorithm == CompressionAlgorithm.Deflate || algorithm == CompressionAlgorithm.Zlib, "algorithm", "Invalid parameter"); #if SILVERLIGHT throw new NotSupportedException(); #else if (algorithm == CompressionAlgorithm.Deflate) { byte[] buffer = _memoryStream.ToArray(); MemoryStream ms = new MemoryStream(); DeflateStream deflateStream = new DeflateStream(ms, CompressionMode.Compress, true); deflateStream.Write(buffer, 0, buffer.Length); deflateStream.Close(); _memoryStream.Close(); _memoryStream = ms; AMFReader amfReader = new AMFReader(_memoryStream); AMFWriter amfWriter = new AMFWriter(_memoryStream); _dataOutput = new DataOutput(amfWriter); _dataInput = new DataInput(amfReader); } if (algorithm == CompressionAlgorithm.Zlib) { byte[] buffer = _memoryStream.ToArray(); MemoryStream ms = new MemoryStream(); ZlibStream zlibStream = new ZlibStream(ms, CompressionMode.Compress, true); zlibStream.Write(buffer, 0, buffer.Length); zlibStream.Flush(); zlibStream.Close(); zlibStream.Dispose(); _memoryStream.Close(); _memoryStream = ms; AMFReader amfReader = new AMFReader(_memoryStream); AMFWriter amfWriter = new AMFWriter(_memoryStream); _dataOutput = new DataOutput(amfWriter); _dataInput = new DataInput(amfReader); } #endif }
/// <summary> /// Initializes a new instance of the ByteArray class. /// </summary> /// <param name="buffer">The array of unsigned bytes from which to create the current ByteArray.</param> public ByteArray(byte[] buffer) { _memoryStream = new MemoryStream(); _memoryStream.Write(buffer, 0, buffer.Length); _memoryStream.Position = 0; AMFReader amfReader = new AMFReader(_memoryStream); AMFWriter amfWriter = new AMFWriter(_memoryStream); _dataOutput = new DataOutput(amfWriter); _dataInput = new DataInput(amfReader); _objectEncoding = ObjectEncoding.AMF3; }
/// <summary> /// Decompresses the byte array. The byte array must have been previously compressed with the Compress() method. /// </summary> /// <param name="algorithm">The compression algorithm to use when decompressing. This must be the same compression algorithm used to compress the data. Valid values are defined as constants in the CompressionAlgorithm class. The default is to use zlib format.</param> public void Uncompress(string algorithm) { ValidationUtils.ArgumentConditionTrue(algorithm == CompressionAlgorithm.Deflate || algorithm == CompressionAlgorithm.Zlib, "algorithm", "Invalid parameter"); #if SILVERLIGHT throw new NotSupportedException(); #else if (algorithm == CompressionAlgorithm.Zlib) { //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 Position = 0; ZlibStream deflateStream = new ZlibStream(_memoryStream, CompressionMode.Decompress, false); MemoryStream ms = new MemoryStream(); byte[] buffer = new byte[1024]; // Chop off the first two bytes //int b = _memoryStream.ReadByte(); //b = _memoryStream.ReadByte(); while (true) { int readCount = deflateStream.Read(buffer, 0, buffer.Length); if (readCount > 0) { ms.Write(buffer, 0, readCount); } else { break; } } deflateStream.Close(); _memoryStream.Close(); _memoryStream.Dispose(); _memoryStream = ms; _memoryStream.Position = 0; } if (algorithm == CompressionAlgorithm.Deflate) { Position = 0; DeflateStream deflateStream = new DeflateStream(_memoryStream, CompressionMode.Decompress, false); MemoryStream ms = new MemoryStream(); byte[] buffer = new byte[1024]; while (true) { int readCount = deflateStream.Read(buffer, 0, buffer.Length); if (readCount > 0) { ms.Write(buffer, 0, readCount); } else { break; } } deflateStream.Close(); _memoryStream.Close(); _memoryStream.Dispose(); _memoryStream = ms; _memoryStream.Position = 0; } AMFReader amfReader = new AMFReader(_memoryStream); AMFWriter amfWriter = new AMFWriter(_memoryStream); _dataOutput = new DataOutput(amfWriter); _dataInput = new DataInput(amfReader); #endif }