/// <summary> /// Read Bytes Routine /// </summary> /// <param name="buffer">The buffer.</param> /// <param name="pos">The position.</param> /// <param name="len">The length.</param> /// <param name="endOfFile">if set to <c>true</c> [end of file].</param> /// <returns></returns> protected override int ReadBytes(byte[] buffer, int pos, int len, out bool endOfFile) { len = len > _readRemain ? (int)_readRemain : len; _readRemain -= (uint)len; endOfFile = _readRemain == 0; _readFile.Read(buffer, pos, len); _readAdler32 = Adler32.Checksum(_readAdler32, buffer, pos, len); return(len); }
/// <summary> /// Converts the given <paramref name="data"/> to it's byte array representation. /// The ChecksumedStream is on the same situation as <seealso cref="ProcessSubStream"/> the only difference /// is that instead of an extended size indicator there is only a checksum of the data in the stream /// /// The following opcodes are supported /// <seealso cref="Opcode.ChecksumedStream" /> 5 bytes minimum, Adler32 checksum, data is encoded as a normal Marshal string /// with header and save lists included /// </summary> /// <param name="writer">Where to write the encoded data to</param> /// <param name="data">The value to write</param> private static void ProcessChecksumedStream(BinaryWriter writer, PyChecksumedStream data) { byte[] buffer = ToByteArray(data.Data, false); uint checksum = Adler32.Checksum(buffer); writer.WriteOpcode(Opcode.ChecksumedStream); writer.Write(checksum); writer.Write(buffer); }
//////////////////////////////////////////////////////////////////// // Write Bytes Routine //////////////////////////////////////////////////////////////////// public override void WriteBytes ( Byte[] Buffer, Int32 Pos, Int32 Len ) { WriteAdler32 = Adler32.Checksum(WriteAdler32, Buffer, Pos, Len); WriteFile.Write(Buffer, Pos, Len); return; }
//////////////////////////////////////////////////////////////////// // Read Bytes Routine //////////////////////////////////////////////////////////////////// public override Int32 ReadBytes ( Byte[] Buffer, Int32 Pos, Int32 Len, out Boolean EndOfFile ) { Len = Len > ReadRemain ? (Int32)ReadRemain : Len; ReadRemain -= (UInt32)Len; EndOfFile = ReadRemain == 0; ReadFile.Read(Buffer, Pos, Len); ReadAdler32 = Adler32.Checksum(ReadAdler32, Buffer, Pos, Len); return(Len); }
/// <summary> /// Write Bytes Routine /// </summary> /// <param name="buffer">The buffer.</param> /// <param name="pos">The position.</param> /// <param name="len">The length.</param> protected override void WriteBytes(byte[] buffer, int pos, int len) { _writeAdler32 = Adler32.Checksum(_writeAdler32, buffer, pos, len); _writeFile.Write(buffer, pos, len); }