/// <exception cref="System.IO.IOException" /> internal static void TestDifferentClassVersionsUsingDataWriteAndRead(ISerializationService serializationService, ISerializationService serializationService2) { var p1 = new NamedPortable("portable-v1", 111); var data = serializationService.ToData(p1); // emulate socket write by writing data to stream IBufferObjectDataOutput @out = serializationService.CreateObjectDataOutput(1024); @out.WriteData(data); byte[] bytes = @out.ToByteArray(); // emulate socket read by reading data from stream IBufferObjectDataInput @in = serializationService2.CreateObjectDataInput(bytes); data = @in.ReadData(); // read data object object1 = serializationService2.ToObject <object>(data); // serialize new portable version var p2 = new NamedPortableV2("portable-v2", 123); var data2 = serializationService2.ToData(p2); // de-serialize back using old version object object2 = serializationService.ToObject <object>(data2); Assert.IsNotNull(object1, "object1 should not be null!"); Assert.IsNotNull(object2, "object2 should not be null!"); Assert.IsInstanceOf <NamedPortableV2>(object1, "Should be instance of NamedPortableV2: " + object1.GetType()); Assert.IsInstanceOf <NamedPortable>(object2, "Should be instance of NamedPortable: " + object2.GetType()); }
public void ReturnOutputBuffer(IBufferObjectDataOutput output) { if (output == null) { return; } output.Clear(); OfferOrClose(outputQueue, output); }
/// <exception cref="System.IO.IOException"/> internal void WriteInternal(IBufferObjectDataOutput output, IPortable p) { var cd = _context.LookupOrRegisterClassDefinition(p); output.WriteInt(cd.GetVersion()); var writer = new DefaultPortableWriter(this, output, cd); p.WritePortable(writer); writer.End(); }
/// <exception cref="System.IO.IOException" /> public DefaultPortableWriter(PortableSerializer serializer, IBufferObjectDataOutput @out, IClassDefinition cd) { this.serializer = serializer; this.@out = @out; this.cd = cd; writtenFields = new HashSet<string>(); //cd.GetFieldCount() begin = @out.Position(); // room for final offset @out.WriteZeroBytes(4); @out.WriteInt(cd.GetFieldCount()); offset = @out.Position(); // one additional for raw data var fieldIndexesLength = (cd.GetFieldCount() + 1)*Bits.IntSizeInBytes; @out.WriteZeroBytes(fieldIndexesLength); }
/// <exception cref="System.IO.IOException" /> public DefaultPortableWriter(PortableSerializer serializer, IBufferObjectDataOutput @out, IClassDefinition cd) { _serializer = serializer; _out = @out; _cd = cd; _writtenFields = new HashSet <string>(); //cd.GetFieldCount() _begin = @out.Position(); // room for final offset @out.WriteZeroBytes(4); @out.WriteInt(cd.GetFieldCount()); _offset = @out.Position(); // one additional for raw data var fieldIndexesLength = (cd.GetFieldCount() + 1) * Bits.IntSizeInBytes; @out.WriteZeroBytes(fieldIndexesLength); }
internal void Push(IBufferObjectDataOutput output) { if (output == null) { return; } output.Clear(); ConcurrentQueue <IBufferObjectDataOutput> outputQueue; _map.TryGetValue(Thread.CurrentThread, out outputQueue); if (outputQueue == null) { IOUtil.CloseResource(output); return; } try { outputQueue.Enqueue(output); } catch (Exception) { IOUtil.CloseResource(output); } }
private void ReturnDataOutput(IBufferObjectDataOutput output) => _bufferPoolThreadLocal.Get().ReturnOutputBuffer(output);
protected internal void Push(IBufferObjectDataOutput output) { _dataOutputQueue.Push(output); }
public void ReturnOutputBuffer(IBufferObjectDataOutput output) => _outputPool.Return(output);