Beispiel #1
0
  private void readFieldDescriptors(LittleEndianInputStream is, int nFields) throws IOException {

    // read description of each field
    byte[] asciiFieldName = new byte[11];
    for (int i = 0; i < nFields; i++) {
      DBFField field = new DBFField();
      is.read(asciiFieldName);
      field.name = bytesToString(asciiFieldName, asciiFieldName.length, this.charsetName);
      field.type = is.readUnsignedByte();
      field.address = is.readInt();
      field.length = is.readUnsignedByte();
      field.decimalCount = is.readUnsignedByte();
      is.readShort(); // overread reserved value
      field.workAreaID = is.readUnsignedByte();
      field.multiUserDBase = is.readShort();
      field.setFields = is.readUnsignedByte();
      is.skipBytes(7); // overread 7 reserved bytes
      field.fieldInMDXIndex = is.readUnsignedByte();

      this.fields.add(field);

      this.printInfo("\n" + field.toString());
    }

    // overread the Header Record Terminator, which should be 0x0D
    byte terminator = is.readByte();
    if (terminator != 0x0D) {
      throw new IOException("DBF file is corrupt.");
    }
  }