/* DBFHeader Class for reading the metadata assuming that the given InputStream carries DBF data. This file is part of JavaDBF packege. Author: anil@linuxense.com License: LGPL (http://www.gnu.org/copyleft/lesser.html) $Id$ */ package com.linuxense.javadbf; import java.io.*; import java.util.*; class DBFHeader { static final byte SIG_DBASE_III = (byte)0x03; /* DBF structure start here */ byte signature; /* 0 */ byte year; /* 1 */ byte month; /* 2 */ byte day; /* 3 */ int numberOfRecords; /* 4-7 */ short headerLength; /* 8-9 */ short recordLength; /* 10-11 */ short reserv1; /* 12-13 */ byte incompleteTransaction; /* 14 */ byte encryptionFlag; /* 15 */ int freeRecordThread; /* 16-19 */ int reserv2; /* 20-23 */ int reserv3; /* 24-27 */ byte mdxFlag; /* 28 */ byte languageDriver; /* 29 */ short reserv4; /* 30-31 */ DBFField []fieldArray; /* each 32 bytes */ byte terminator1; /* n+1 */ //byte[] databaseContainer; /* 263 bytes */ /* DBF structure ends here */ DBFHeader() { this.signature = SIG_DBASE_III; this.terminator1 = 0x0D; } void read( DataInput dataInput) throws IOException { signature = dataInput.readByte(); /* 0 */ year = dataInput.readByte(); /* 1 */ month = dataInput.readByte(); /* 2 */ day = dataInput.readByte(); /* 3 */ numberOfRecords = Utils.readLittleEndianInt( dataInput); /* 4-7 */ headerLength = Utils.readLittleEndianShort( dataInput); /* 8-9 */ recordLength = Utils.readLittleEndianShort( dataInput); /* 10-11 */ reserv1 = Utils.readLittleEndianShort( dataInput); /* 12-13 */ incompleteTransaction = dataInput.readByte(); /* 14 */ encryptionFlag = dataInput.readByte(); /* 15 */ freeRecordThread = Utils.readLittleEndianInt( dataInput); /* 16-19 */ reserv2 = dataInput.readInt(); /* 20-23 */ reserv3 = dataInput.readInt(); /* 24-27 */ mdxFlag = dataInput.readByte(); /* 28 */ languageDriver = dataInput.readByte(); /* 29 */ reserv4 = Utils.readLittleEndianShort( dataInput); /* 30-31 */ Vector v_fields = new Vector(); DBFField field = DBFField.createField( dataInput); /* 32 each */ while( field != null) { v_fields.addElement( field); field = DBFField.createField( dataInput); } fieldArray = new DBFField[ v_fields.size()]; for( int i=0; i