/// <summary> /// Creates a new instance of a <see cref="ObjectWriter"/>. /// </summary> /// <param name="stream">The stream to write to.</param> /// <param name="leaveOpen">True to leave the <paramref name="stream"/> open after the <see cref="ObjectWriter"/> is disposed.</param> /// <param name="cancellationToken">Cancellation token.</param> public ObjectWriter( Stream stream, bool leaveOpen = false, CancellationToken cancellationToken = default) { // String serialization assumes both reader and writer to be of the same endianness. // It can be adjusted for BigEndian if needed. LorettaDebug.Assert(BitConverter.IsLittleEndian); _writer = new BinaryWriter(stream, Encoding.UTF8, leaveOpen); _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(); }
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. RoslynDebug.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; }