Esempio n. 1
0
 // internal methods
 internal virtual void ReadHeaderFrom(BsonStreamReader streamReader)
 {
     _messageLength = streamReader.ReadInt32();
     _requestId = streamReader.ReadInt32();
     _responseTo = streamReader.ReadInt32();
     if ((MessageOpcode)streamReader.ReadInt32() != _opcode)
     {
         throw new FileFormatException("Message header opcode is not the expected one.");
     }
 }
 /// <summary>
 /// Reads a BSON Int32 from the reader.
 /// </summary>
 /// <returns>An Int32.</returns>
 public override int ReadInt32()
 {
     if (Disposed)
     {
         ThrowObjectDisposedException();
     }
     VerifyBsonType("ReadInt32", BsonType.Int32);
     State = GetNextState();
     return(_streamReader.ReadInt32());
 }
        /// <summary>
        /// Loads a byte buffer from a stream (the first 4 bytes in the stream are the length of the data).
        /// Depending on the required capacity, either a SingleChunkBuffer or a MultiChunkBuffer will be created.
        /// </summary>
        /// <param name="stream">The stream.</param>
        /// <returns>A buffer.</returns>
        /// <exception cref="System.ArgumentNullException">stream</exception>
        public static IByteBuffer LoadLengthPrefixedDataFrom(Stream stream)
        {
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }

            var streamReader = new BsonStreamReader(stream, Utf8Helper.StrictUtf8Encoding);
            var length = streamReader.ReadInt32();

            var byteBuffer = Create(BsonChunkPool.Default, length);
            byteBuffer.Length = length;
            byteBuffer.WriteBytes(0, BitConverter.GetBytes(length), 0, 4);
            byteBuffer.LoadFrom(stream, 4, length - 4);
            byteBuffer.MakeReadOnly();

            return byteBuffer;
        }
        /// <summary>
        /// Loads a byte buffer from a stream (the first 4 bytes in the stream are the length of the data).
        /// Depending on the required capacity, either a SingleChunkBuffer or a MultiChunkBuffer will be created.
        /// </summary>
        /// <param name="stream">The stream.</param>
        /// <returns>A buffer.</returns>
        /// <exception cref="System.ArgumentNullException">stream</exception>
        public static IByteBuffer LoadLengthPrefixedDataFrom(Stream stream)
        {
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }

            var streamReader = new BsonStreamReader(stream, Utf8Helper.StrictUtf8Encoding);
            var length       = streamReader.ReadInt32();

            var byteBuffer = Create(BsonChunkPool.Default, length);

            byteBuffer.Length = length;
            byteBuffer.WriteBytes(0, BitConverter.GetBytes(length), 0, 4);
            byteBuffer.LoadFrom(stream, 4, length - 4);
            byteBuffer.MakeReadOnly();

            return(byteBuffer);
        }