示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
        }
示例#3
0
        ////////////////////////////////////////////////////////////////////
        // 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;
        }
示例#4
0
        ////////////////////////////////////////////////////////////////////
        // 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);
        }
示例#5
0
 /// <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);
 }