//TODO: clean data after read if needed //private void clean(Stream stream, int count) //{ // for (int i = 0; i < count; i++) // stream.WriteByte(0); // stream.Seek(0, SeekOrigin.Begin); //} public TSerializable Read <TSerializable>() { throwIfDisposed(); using (Stream view = _file.CreateViewStream(0, _bufferSize, MemoryMappedFileAccess.Read)) { byte[] lengthPrefixData = new byte[sizeof(int)]; view.Read(lengthPrefixData, 0, sizeof(int)); //TODO: ensure that if lengthPrefix != 0 then it is really != 0, e.g. when mmf created is it zeroed? int lengthPrefix = BitConverter.ToInt32(lengthPrefixData, 0); if (lengthPrefix == 0) { return(default(TSerializable)); } byte[] data = new byte[lengthPrefix]; view.Read(data, 0, lengthPrefix); if (data.Length == 0) { return(default(TSerializable)); } TSerializable @object = (TSerializable)_serializator.ReadObject(data); return(@object); } }
public Container(TObject @object, TSerializable serializable) { Object = @object; Serializable = serializable; }