Пример #1
0
            //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);
                }
            }
Пример #2
0
 public Container(TObject @object, TSerializable serializable)
 {
     Object       = @object;
     Serializable = serializable;
 }