Exemple #1
0
        /// <summary>
        /// Deserializes BSON document from stream containing BSON-encoded data
        /// </summary>
        public BSONDocument(Stream stream)
        {
            if (stream == null)
            {
                throw new BSONException(StringConsts.ARGUMENT_ERROR + "BSONDocument.ctor(stream==null)");
            }

            long start     = stream.Position;
            var  totalSize = BinUtils.ReadInt32(stream);
            long read      = 4;

            while (read < totalSize - 1)
            {
                var et      = BinUtils.ReadElementType(stream);
                var factory = BSONElement.GetElementFactory(et);
                var element = factory(stream);//element made
                Set(element);
                read = stream.Position - start;
            }
            var terminator = BinUtils.ReadByte(stream);

            if (terminator != BinUtils.TERMINATOR || stream.Position - start != totalSize)
            {
                throw new BSONException(StringConsts.BSON_EOD_ERROR);
            }
        }
Exemple #2
0
        /// <summary>
        ///  Reads BSON cstring from stream
        /// </summary>
        public static string ReadCString(Stream stream, int length)
        {
            if (length == 0)
            {
                return(string.Empty);
            }

            if (length < 0)
            {
                throw new BSONException(StringConsts.BSON_INCORRECT_STRING_LENGTH_ERROR.Args(length));
            }

            var buffer = new byte[length - 1];

            stream.Read(buffer, 0, length - 1);

            var terminator = BinUtils.ReadByte(stream);

            if (terminator != TERMINATOR)
            {
                throw new BSONException(StringConsts.BSON_UNEXPECTED_END_OF_STRING_ERROR);
            }

            return(s_UTF8Encoding.GetString(buffer, 0, length - 1));
        }
Exemple #3
0
        protected override void ReadValueFromStream(Stream stream)
        {
            var  elements  = new List <BSONElement>();
            long start     = stream.Position;
            var  totalSize = BinUtils.ReadInt32(stream);
            long read      = 4;

            while (read < totalSize - 1)
            {
                var et      = BinUtils.ReadElementType(stream);
                var factory = BSONElement.GetElementFactory(et);
                var element = factory(stream);//element made
                element.MarkAsArrayItem();
                elements.Add(element);
                read = stream.Position - start;
            }
            Value = elements.ToArray();

            var terminator = BinUtils.ReadByte(stream);

            if (terminator != BinUtils.TERMINATOR || stream.Position - start != totalSize)
            {
                throw new BSONException(StringConsts.BSON_EOD_ERROR);
            }
        }
Exemple #4
0
        protected override void ReadValueFromStream(Stream stream)
        {
            var length = BinUtils.ReadInt32(stream);
            var type   = BinUtils.ReadByte(stream);
            var buffer = new byte[length];

            stream.Read(buffer, 0, length);

            Value = new BSONBinary((BSONBinaryType)type, buffer);
        }
Exemple #5
0
        protected override void ReadValueFromStream(Stream stream)
        {
            var flag = BinUtils.ReadByte(stream);

            switch (flag)
            {
            case (byte)BSONBoolean.True:
                Value = true; break;

            case (byte)BSONBoolean.False:
                Value = false; break;

            default:
                throw new BSONException(StringConsts.BSON_READ_BOOLEAN_ERROR.Args(flag));
            }
        }