/// <summary> /// Reads /// <see cref="V8Commit.Entities.V8FileSystem.V8FileSystemReference"/> /// from bytes buffer /// </summary> /// <param name="buffer"> /// Bytes buffer, passed by reference, /// that contains the data to read /// </param> /// <param name="offset"> /// Start position to read from bytes buffer /// </param> /// <returns> /// Returns /// <see cref="V8Commit.Entities.V8FileSystem.V8FileSystemReference"/> /// with data /// </returns> /// <permission cref="System.Security.PermissionSet">Everyone /// can access this method. /// </permission> public V8FileSystemReference ReadFileSystemReference(byte[] buffer, Int32 offset) { V8FileSystemReference reference = new V8FileSystemReference(); reference.RefToHeader = BitConverter.ToInt32(buffer, offset); reference.RefToData = BitConverter.ToInt32(buffer, offset + 4); reference.ReservedField = BitConverter.ToInt32(buffer, offset + 8); return reference; }
/// <summary> /// Writes deflated data bytes from /// <see cref = "V8Commit.Entities.V8FileSystem.V8FileSystemReference"/> /// file to <see cref="System.IO.MemoryStream"/> /// </summary> /// <param name="stream"> /// <see cref="System.IO.MemoryStream"/>, passed by reference, /// in which data bytes will be placed /// </param> /// <param name="file"> /// <see cref="V8Commit.Entities.V8FileSystem.V8FileSystemReference"/>, /// passed by reference, that contains references to file header and /// data to read from <see cref="_reader"/> /// </param> /// <example> This sample shows how to use /// the ReadV8FileRawData method from your plugin /// <code> /// /// using (FileV8Reader v8Reader = new FileV8Reader(Input)) /// { /// var fileSystem = v8Reader.ReadV8FileSystem(); /// foreach (var reference in fileSystem.References) /// { /// using (MemoryStream stream = new MemoryStream()) /// { /// v8Reader.ReadV8FileRawData(stream, file); /// /// // some yours сode /// /// } /// } /// } /// /// </code> /// </example> /// <permission cref="System.Security.PermissionSet">Everyone /// can access this method. /// </permission> public void ReadV8FileRawData(MemoryStream stream, V8FileSystemReference file) { Seek(file.RefToData, SeekOrigin.Begin); using (var tmpStream = new MemoryStream(ReadBytes(ReadBlockHeader()))) { if (file.IsInFlated) { using (var deflateStream = new DeflateStream(tmpStream, CompressionMode.Decompress)) { deflateStream.CopyTo(stream); } } else { tmpStream.CopyTo(stream); } stream.Seek(0, SeekOrigin.Begin); } }