/// <summary> /// Creates a new instance of a <see cref="StreamObjectWriter"/>. /// </summary> /// <param name="stream">The stream to write to.</param> /// <param name="knownObjects">An optional list of objects assumed known by the corresponding <see cref="StreamObjectReader"/>.</param> /// <param name="binder">A binder that provides object and type encoding.</param> /// <param name="recursive">True if the writer encodes objects recursively.</param> /// <param name="cancellationToken"></param> public StreamObjectWriter( Stream stream, ObjectData knownObjects = null, ObjectBinder binder = null, bool recursive = true, CancellationToken cancellationToken = default(CancellationToken)) { // String serialization assumes both reader and writer to be of the same endianness. // It can be adjusted for BigEndian if needed. Debug.Assert(BitConverter.IsLittleEndian); _writer = new BinaryWriter(stream, Encoding.UTF8); _referenceMap = new ReferenceMap(knownObjects); _binder = binder ?? FixedObjectBinder.Empty; _recursive = recursive; _cancellationToken = cancellationToken; WriteVersion(); if (_recursive) { _writer.Write((byte)EncodingKind.Recursive); } else { _writer.Write((byte)EncodingKind.NonRecursive); _valueStack = s_variantStackPool.Allocate(); _memberList = s_variantListPool.Allocate(); _memberWriter = new VariantListWriter(_memberList); } }
internal ObjectReader( Stream stream, ObjectReaderData defaultData = null, ObjectBinder binder = null) { this.reader = new BinaryReader(stream, MultiByteEncoding.Instance); this.dataMap = new ObjectReaderData(defaultData); this.binder = binder; }
internal ObjectReader( Stream stream, ObjectReaderData defaultData = null, ObjectBinder binder = null) { // String serialization assumes both reader and writer to be of the same endianness. // It can be adjusted for BigEndian if needed. Debug.Assert(BitConverter.IsLittleEndian); _reader = new BinaryReader(stream, Encoding.UTF8); _dataMap = new ObjectReaderData(defaultData); _binder = binder; }
private void WriteKnownType(Type type) { _writer.Write((byte)EncodingKind.Type); this.WriteInt32(ObjectBinder.GetTypeId(type)); }
public void WriteType(Type type) { _writer.Write((byte)EncodingKind.Type); this.WriteInt32(ObjectBinder.GetOrAddTypeId(type)); }