protected ShockwaveFlash(FlashReader input) : this(false) { Compression = (CompressionKind)input.ReadString(3)[0]; Version = input.ReadByte(); FileLength = input.ReadUInt32(); switch (Compression) { case CompressionKind.LZMA: { byte[] decompressed = LZMA.Decompress(input.BaseStream, ((int)FileLength - 8)); _input = new FlashReader(decompressed); break; } case CompressionKind.ZLIB: { _input = ZLIB.WrapDecompressor(input.BaseStream); break; } case CompressionKind.None: { _input = input; break; } } Frame = new FrameRecord(_input); }
/// <summary> /// Initializes a new instance of the <see cref="ShockwaveFlash"/> class based on the specified array of bytes. /// </summary> /// <param name="data">The data containing the raw Shockwave Flash(SWF) file.</param> public ShockwaveFlash(byte[] data) { _flashData = data; _abcFiles = new List <ABCFile>(); Reader = new FlashReader(data); Tags = new List <FlashTag>(); Dictionary = new FlashDictionary(); Signature = Reader.ReadString(3); CompressWith = (CompressionStandard)Signature[0]; Version = Reader.ReadByte(); FileLength = Reader.ReadUInt32(); if (CompressWith == CompressionStandard.None) { ReadFrameInformation(); } else { IsCompressed = true; } }
public void ReadConstants() { _integers.Capacity = _reader.Read7BitEncodedInt(); if (_integers.Capacity > 0) { _integers.Add(0); for (int i = 1; i < _integers.Capacity; i++) { _integers.Add(_reader.Read7BitEncodedInt()); } } _uintegers.Capacity = _reader.Read7BitEncodedInt(); if (_uintegers.Capacity > 0) { _uintegers.Add(0); for (int i = 1; i < _uintegers.Capacity; i++) { _uintegers.Add((uint)_reader.Read7BitEncodedInt()); } } _doubles.Capacity = _reader.Read7BitEncodedInt(); if (_doubles.Capacity > 0) { _doubles.Add(double.NaN); for (int i = 1; i < _doubles.Capacity; i++) { _doubles.Add(_reader.ReadDouble()); } } _strings.Capacity = _reader.Read7BitEncodedInt(); if (_strings.Capacity > 0) { _strings.Add(string.Empty); for (int i = 1; i < _strings.Capacity; i++) { _strings.Add(_reader.ReadString()); } } _namespaces.Capacity = _reader.Read7BitEncodedInt(); if (_namespaces.Capacity > 0) { _namespaces.Add(null); for (int i = 1; i < _namespaces.Capacity; i++) { _namespaces.Add(new ASNamespace(ABC, _reader)); } } _namespaceSets.Capacity = _reader.Read7BitEncodedInt(); if (_namespaceSets.Capacity > 0) { _namespaceSets.Add(null); for (int i = 1; i < _namespaceSets.Capacity; i++) { _namespaceSets.Add(new ASNamespaceSet(ABC, _reader)); } } _multinames.Capacity = _reader.Read7BitEncodedInt(); if (_multinames.Capacity > 0) { _multinames.Add(null); for (int i = 1; i < _multinames.Capacity; i++) { _multinames.Add(new ASMultiname(ABC, _reader)); } } }