Пример #1
0
        /// <summary>
        ///   Translates the given <see cref="IdxDataType"/> to a .NET <see cref="Type"/>.
        /// </summary>
        ///
        /// <param name="type">The type to be translated.</param>
        ///
        /// <returns>
        ///   A .NET <see cref="Type"/> that represents the <see cref="IdxDataType"/>.
        /// </returns>
        ///
        public static Type Translate(IdxDataType type)
        {
            switch (type)
            {
            case IdxDataType.UnsignedByte:
                return(typeof(byte));

            case IdxDataType.SignedByte:
                return(typeof(sbyte));

            case IdxDataType.Short:
                return(typeof(short));

            case IdxDataType.Integer:
                return(typeof(int));

            case IdxDataType.Float:
                return(typeof(float));

            case IdxDataType.Double:
                return(typeof(double));
            }

            throw new ArgumentOutOfRangeException("type");
        }
Пример #2
0
 public static void Write(string fileName, byte[] data, int samples, IdxDataType dataType, int dimensionsCount, int[] dimensions)
 {
     using (FileStream writer = new FileStream(fileName, FileMode.Create, FileAccess.Write))
     {
         WriteHead(writer, samples, dataType, dimensionsCount, dimensions);
         writer.Write(data, 0, data.Length);
     }
 }
Пример #3
0
 private static void WriteHead(FileStream writer, int samples, IdxDataType dataType, int dimensionsCount, int[] dimensions)
 {
     writer.Write(BitConverter.GetBytes(GenMagicNumber(dataType, dimensionsCount)), 0, 4);
     writer.Write(BitConverter.GetBytes(Utils.ChangeEndian(samples)), 0, 4);
     foreach (int dimension in dimensions)
     {
         writer.Write(BitConverter.GetBytes(Utils.ChangeEndian(dimension)), 0, 4);
     }
 }
Пример #4
0
 public static void Write(string fileName, List <byte[]> data, int samples, IdxDataType dataType, int dimensionsCount, int[] dimensions)
 {
     using (FileStream writer = new FileStream(fileName, FileMode.Create, FileAccess.Write))
     {
         WriteHead(writer, samples, dataType, dimensionsCount, dimensions);
         foreach (byte[] sample in data)
         {
             writer.Write(sample, 0, sample.Length);
         }
     }
 }
Пример #5
0
        public IdxReader(string fileName, bool isGzip = false)
        {
            using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read))
            {
                Stream sourceStream = fs;
                if (isGzip)
                {
                    GZipStream gzip = new GZipStream(fs, CompressionMode.Decompress);
                    sourceStream = gzip;
                }
                byte[] buffer = new byte[4];
                sourceStream.Read(buffer, 0, 4);
                try
                {
                    dataType = (IdxDataType)buffer[2];
                }
                catch
                {
                    throw new NotAValidDataTypeException("Data type byte does not represent a known data type.");
                }
                int dimCount = buffer[3] - 1;
                dimensions  = new int[dimCount];
                magicNumber = Utils.IntFromBytesBigEndian(buffer);
                sourceStream.Read(buffer, 0, 4);
                samples = Utils.IntFromBytesBigEndian(buffer);
                for (int i = 0; i < dimCount; ++i)
                {
                    sourceStream.Read(buffer, 0, 4);
                    dimensions[i] = Utils.IntFromBytesBigEndian(buffer);
                }
                //read data
                int sampleValuesCount = 1;
                foreach (int dim in dimensions)
                {
                    sampleValuesCount *= dim;
                }
                int sampleSizeInBytes = sampleValuesCount * Utils.BytesPerDataType[dataType];
                data = new byte[sampleSizeInBytes * samples];
                try
                {
                    sourceStream.Read(data, 0, data.Length);
                }
                catch
                {
                    throw new MismatchingFileSizeException($"Couldn't read data. Number of data bytes expected:{data.Length}");
                }

                sourceStream.Dispose();
            }
        }
Пример #6
0
        private Type GetTypeFromIdxType(IdxDataType idxType)
        {
            switch (idxType)
            {
            case IdxDataType.UByte:
            case IdxDataType.SByte:
                return(typeof(byte));

            case IdxDataType.Short:
                return(typeof(short));

            case IdxDataType.Int:
                return(typeof(int));

            case IdxDataType.Float:
                return(typeof(float));

            default:
                return(typeof(double));
            }
        }
Пример #7
0
        private static int GenMagicNumber(IdxDataType dataType, int dimensionsCount)
        {
            int magicNumber = (dimensionsCount << 24) | ((byte)dataType << 16);

            return(magicNumber);
        }