/// <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); } }
/// <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)); }
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); } }
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); }
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)); } }