public void readFields(DataInput @in)
        {
            //deserialize path, offset, length using FileSplit
            base.readFields(@in);

            byte flags = @in.readByte();

            hasFooter  = (FOOTER_FLAG & flags) != 0;
            isOriginal = (ORIGINAL_FLAG & flags) != 0;
            hasBase    = (BASE_FLAG & flags) != 0;
            bool hasFileId = (HAS_FILEID_FLAG & flags) != 0;

            deltas.Clear();
            int numDeltas = @in.readInt();

            for (int i = 0; i < numDeltas; i++)
            {
                AcidInputFormat.DeltaMetaData dmd = new AcidInputFormat.DeltaMetaData();
                dmd.readFields(@in);
                deltas.Add(dmd);
            }
            if (hasFooter)
            {
                // deserialize FileMetaInfo fields
                string compressionType = Text.readString(@in);
                int    bufferSize      = WritableUtils.readVInt(@in);
                int    metadataSize    = WritableUtils.readVInt(@in);

                // deserialize FileMetaInfo field footer
                int        footerBuffSize = WritableUtils.readVInt(@in);
                ByteBuffer footerBuff     = ByteBuffer.allocate(footerBuffSize);
                @in.readFully(footerBuff.array(), 0, footerBuffSize);
                OrcFile.WriterVersion writerVersion =
                    ReaderImpl.getWriterVersion(WritableUtils.readVInt(@in));

                fileMetaInfo = new FileMetaInfo(compressionType, bufferSize,
                                                metadataSize, footerBuff, writerVersion);
            }
            if (hasFileId)
            {
                fileId = @in.readLong();
            }
        }
        public void readFields(DataInput @in)
        {
            //deserialize path, offset, length using FileSplit
            base.readFields(@in);

            byte flags = @in.readByte();
            _hasFooter = (OrcSplit.FOOTER_FLAG & flags) != 0;
            _isOriginal = (OrcSplit.ORIGINAL_FLAG & flags) != 0;
            _hasBase = (OrcSplit.BASE_FLAG & flags) != 0;

            deltas.Clear();
            int numDeltas = @in.readInt();
            for (int i = 0; i < numDeltas; i++)
            {
                AcidInputFormat.DeltaMetaData dmd = new AcidInputFormat.DeltaMetaData();
                dmd.readFields(@in);
                deltas.Add(dmd);
            }
            if (_hasFooter)
            {
                // deserialize FileMetaInfo fields
                string compressionType = Text.readString(@in);
                int bufferSize = WritableUtils.readVInt(@in);
                int metadataSize = WritableUtils.readVInt(@in);

                // deserialize FileMetaInfo field footer
                int footerBuffSize = WritableUtils.readVInt(@in);
                ByteBuffer footerBuff = ByteBuffer.allocate(footerBuffSize);
                @in.readFully(footerBuff.array(), 0, footerBuffSize);
                OrcFile.WriterVersion writerVersion =
                    ReaderImpl.getWriterVersion(WritableUtils.readVInt(@in));

                fileMetaInfo = new FileMetaInfo(compressionType, bufferSize,
                    metadataSize, footerBuff, writerVersion);
            }
        }