internal static Datatype ReadMessage( DatatypeHeader aHeader, Hdf5Reader aReader, long?aLocalMessageSize, out long aBytes) { if (aHeader.Class != DatatypeClass.Opaque) { throw new ArgumentException( $"aHeader must be for type {nameof(DatatypeClass.Opaque)}"); } int fTagSize = (int)aHeader.Flags & byte.MaxValue; if (aLocalMessageSize.HasValue && aLocalMessageSize < fTagSize) { throw new ArgumentException("Specified Local Message Size not long enough"); } byte[] fTagBytes = new byte[fTagSize]; int fReadByteCount = aReader.Read(fTagBytes, 0, fTagSize); if (fReadByteCount != fTagSize) { throw new EndOfStreamException("Could not read entire Opaque data type"); } String fAsciiTag = Encoding.ASCII.GetString(fTagBytes).TrimEnd((char)0); aBytes = fTagSize; return(new OpaqueDataType( aHeader, fAsciiTag)); }
public static DatatypeHeader Read(Hdf5Reader aStream) { byte[] fBuffer = new byte[HeaderSize]; if (4 != aStream.Read(fBuffer, 0, 4)) { throw new EndOfStreamException(); } byte fVersion = (byte)((fBuffer[0] >> 4) & 0xF); if (fVersion < (byte)DatatypeVersion.Version1 || fVersion > (byte)DatatypeVersion.Version3) { throw new UnknownMessageVersion <Datatype>(fVersion); } byte fClass = (byte)(fBuffer[0] & 0xF); if (fClass > (byte)DatatypeClass.Array) { throw new InvalidDataException($"Unkown Datatype Class {fClass}"); } uint fFlags = (uint)(fBuffer[1] | fBuffer[2] << 8 | fBuffer[3] << 16); uint fSize = aStream.ReadUInt32(); return(new DatatypeHeader( (DatatypeVersion)fVersion, (DatatypeClass)fClass, fFlags, fSize)); }
public IObjectHeader ReadHeaderAt(long aHeaderLocation) { using (Hdf5Reader fReader = mrStreamProvider.GetReader()) { const int fcHeadBytes = 4; byte[] fHead = new byte[fcHeadBytes]; if (fcHeadBytes != fReader.Read(fHead, 0, fcHeadBytes)) { throw new System.IO.EndOfStreamException( $"Could not read header at 0x{aHeaderLocation:x16}"); } if (fHead[0] == 1 && fHead[1] == 0) { return(V1ObjectHeader.Read(fHead, fReader)); } if (fHead.Zip(msrV2Header, (arg1, arg2) => arg1 == arg2).All(a => a)) { return(V2ObjectHeader.Read(fReader)); } } throw new Exceptions.CorruptObjectHeader("Could not determine Header version"); }