private ObjectReader(Stream stream, bool leaveOpen, CancellationToken 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); _reader = new BinaryReader(stream, Encoding.UTF8, leaveOpen); _objectReferenceMap = ReaderReferenceMap <object> .Create(); _stringReferenceMap = ReaderReferenceMap <string> .Create(); // Capture a copy of the current static binder state. That way we don't have to // access any locks while we're doing our processing. _binderSnapshot = ObjectBinder.GetSnapshot(); _cancellationToken = cancellationToken; }
/// <summary> /// Creates a new instance of a <see cref="ObjectWriter"/>. /// </summary> /// <param name="stream">The stream to write to.</param> /// <param name="cancellationToken"></param> public ObjectWriter( Stream stream, 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); _objectReferenceMap = new WriterReferenceMap(valueEquality: false); _stringReferenceMap = new WriterReferenceMap(valueEquality: true); _cancellationToken = cancellationToken; // Capture a copy of the current static binder state. That way we don't have to // access any locks while we're doing our processing. _binderSnapshot = ObjectBinder.GetSnapshot(); WriteVersion(); }