public override Byte[] ReadExtents(ObjectExtentsList myObjectExtentsList) { try { Byte[] byteArray = null; var _OutputStream = new MemoryStream(); foreach (var _ObjectExtent in myObjectExtentsList) { byteArray = ReadPosition(_ObjectExtent.PhysicalPosition, _ObjectExtent.Length); _OutputStream.Seek((Int64)_ObjectExtent.LogicalPosition, SeekOrigin.Begin); _OutputStream.Write(byteArray, 0, (Int32)_ObjectExtent.Length); } return _OutputStream.ToArray(); } catch { return new Byte[0]; } }
public override Boolean WriteExtents(Byte[] myByteArray, ObjectExtentsList myObjectExtentsList) { try { UInt64 copyLength; Byte[] byteArray = null; UInt64 myByteArrayLength = myByteArray.ULongLength(); foreach (var _ObjectExtent in myObjectExtentsList) { byteArray = new Byte[_ObjectExtent.Length]; copyLength = _ObjectExtent.Length; if (_ObjectExtent.LogicalPosition + copyLength > myByteArrayLength) { copyLength = (myByteArrayLength - _ObjectExtent.LogicalPosition); } Array.Copy(myByteArray, (Int32)_ObjectExtent.LogicalPosition, byteArray, 0, (Int32)copyLength); //do the writing WritePosition(byteArray, _ObjectExtent.PhysicalPosition); } return true; } catch { return false; } }
/// <summary> /// Creates an QueueEntry for storing all kinds of filesystem structures and objects. /// </summary> /// <param name="myObjectLocator">The object locator</param> /// <param name="myObjectStream">The ObjectStream (stream ID and Type) of the object (will be used to find the right streams)</param> /// <param name="myObjectEdition">the Name of the object edition</param> /// <param name="myObjectRevision">the requested metatdata object revision timestamp</param> /// <param name="mySerializedObject">the serialized data of the object</param> public QueueEntry(Byte[] mySerializedObject, ObjectExtentsList myExtentsList) { _DataLength = mySerializedObject.ULongLength(); _Data = mySerializedObject; _RWQueueStreams = new List<ObjectExtent>(); _FlushAfterWrite = false; if (_DataLength > myExtentsList.StreamLength) throw new Exception("[QueueEntry] The ObjectSize given in the ObjectStream is smaller than the size of the given data!"); // Add this ObjectStream to the list of streams foreach (var _ObjectExtents in myExtentsList) _RWQueueStreams.Add(_ObjectExtents); }
public abstract Boolean WriteExtents(Byte[] myByteArray, ObjectExtentsList myObjectExtentsList);
public abstract Byte[] ReadExtents(ObjectExtentsList myObjectExtentsList);
public override Boolean WriteExtents(Byte[] myByteArray, ObjectExtentsList myObjectExtentsList) { try { UInt64 _CopyLength; Byte[] _ByteArray = null; UInt64 _myByteArrayLength = myByteArray.ULongLength(); foreach (var _ObjectExtent in myObjectExtentsList) { _ByteArray = new Byte[_ObjectExtent.Length]; _CopyLength = _ObjectExtent.Length; if (_ObjectExtent.LogicalPosition + _CopyLength > _myByteArrayLength) _CopyLength = (_myByteArrayLength - _ObjectExtent.LogicalPosition); Array.Copy(myByteArray, (Int32)_ObjectExtent.LogicalPosition, _ByteArray, 0, (Int32)_CopyLength); _ByteCache.Cache(_ObjectExtent.PhysicalPosition, _ByteArray); _WriteQueue.Write(new QueueEntry(myByteArray, myObjectExtentsList)); } return true; } catch (Exception e) { throw new FileStorageException("Error writing " + myByteArray.ULongLength() + " bytes using extents " + myObjectExtentsList.ToString() + "! " + e.Message); } }
public override Boolean WriteExtents(Byte[] myByteArray, ObjectExtentsList myObjectExtentsList) { try { UInt64 _CopyLength; Byte[] _ByteArray = null; UInt64 _myByteArrayLength = myByteArray.ULongLength(); foreach (var _ObjectExtent in myObjectExtentsList) { _ByteArray = new Byte[_ObjectExtent.Length]; _CopyLength = _ObjectExtent.Length; if (_ObjectExtent.LogicalPosition + _CopyLength > _myByteArrayLength) _CopyLength = (_myByteArrayLength - _ObjectExtent.LogicalPosition); Array.Copy(myByteArray, (Int32)_ObjectExtent.LogicalPosition, _ByteArray, 0, (Int32)_CopyLength); _MemoryStream.Seek((Int64)_ObjectExtent.PhysicalPosition, SeekOrigin.Begin); _MemoryStream.Write(_ByteArray, 0, (Int32) _ObjectExtent.Length); } return true; } catch { return false; } }