예제 #1
0
        private void Flush()
        {
            if (uncompressedStream == null)
            {
                return;
            }

            fileWriter.Write(MatfileHelper.MatlabDataTypeNumber(typeof(ZlibStream)));
            byte[] compressedBuffer = ZlibStream.CompressBuffer(uncompressedStream.ToArray());
            fileWriter.Write((UInt32)compressedBuffer.Length);
            fileWriter.Write(compressedBuffer);

            uncompressedStream = null;
        }
예제 #2
0
        private void WriteFlags(Type arrayElementDataType)
        {
            //write 4 values for flag block

            //Array flags use uint32 data type
            writeStream.Write(MatfileHelper.MatlabDataTypeNumber(typeof(UInt32)));

            //flag block length (always 8)
            writeStream.Write((int)8);

            //array class
            writeStream.Write(MatfileHelper.MatlabArrayTypeNumber(arrayElementDataType));

            //padding (always 0)
            writeStream.Write((int)0);
        }
예제 #3
0
        private void WriteDimensionsPlaceholder()
        {
            //data type contained in dimensions subelement: Int32
            writeStream.Write(MatfileHelper.MatlabDataTypeNumber(typeof(Int32)));

            //always 8 bytes long
            writeStream.Write((int)8);

            //store position, so we can later overwrite these 2 placeholders
            dimensionsStartPosition = writeStream.BaseStream.Position;

            //placeholder for first dimension
            for (int i = 0; i < dimensions.Length * MatfileHelper.MatlabBytesPerType(typeof(Int32)); i++)
            {
                writeStream.Write((byte)0xee);
            }

            totalPaddingAdded += writeStream.AdvanceTo8ByteBoundary();
        }
예제 #4
0
        private void WriteName(string name)
        {
            //write 4 values for name block

            //data type contained in name block (always 1)
            writeStream.Write(MatfileHelper.MatlabDataTypeNumber(typeof(SByte)));

            //size (without padding!)
            int nameLength = name.Length;

            writeStream.Write((int)nameLength);

            //write name itself
            for (int i = 0; i < nameLength; i++)
            {
                writeStream.Write((byte)name[i]);
            }

            totalPaddingAdded += writeStream.AdvanceTo8ByteBoundary();
        }