ui/src/main/java/ucar/nc2/ui/gis/shapefile/DbaseData.java
int readRowN(DataInputStream ds, int n) {
    if (n > nrec) return -1;
    /* the assumption here is that the DataInputStream (ds)
    * is already pointing at the right spot!
    */
    try {
      ds.readFully(field, 0, desc.FieldLength);
    } catch (java.io.IOException e) {
      return -1;
    }
    switch (desc.Type) {
      case 'C':
      case 'D':
        character[n] = new String(field, CDM.utf8Charset);
        break;
      case 'N':
        numeric[n] = Double.valueOf(new String(field, CDM.utf8Charset));
        break;
      case 'F':  /* binary floating point */
        if (desc.FieldLength == 4) {
          numeric[n] = (double) Swap.swapFloat(field, 0);
        } else {
          numeric[n] = Swap.swapDouble(field, 0);
        }
        break;
      case 'L':
        switch (field[0]) {
          case 't':
          case 'T':
          case 'Y':
          case 'y':
            logical[n] = true;
            break;
          default:
            logical[n] = false;
            break;
        }
      default:
        return -1;
    }

    return 0;
  }
int readRowN(DataInputStream ds, int n) {
    if (n > nrec) return -1;
    /* the assumption here is that the DataInputStream (ds)
    * is already pointing at the right spot!
    */
    try {
      ds.readFully(field, 0, desc.FieldLength);
    } catch (java.io.IOException e) {
      return -1;
    }
    switch (desc.Type) {
      case 'C':
      case 'D':
        character[n] = new String(field, CDM.utf8Charset);
        break;
      case 'N':
        numeric[n] = Double.valueOf(new String(field, CDM.utf8Charset));
        break;
      case 'F':  /* binary floating point */
        if (desc.FieldLength == 4) {
          numeric[n] = (double) Swap.swapFloat(field, 0);
        } else {
          numeric[n] = Swap.swapDouble(field, 0);
        }
        break;
      case 'L':
        switch (field[0]) {
          case 't':
          case 'T':
          case 'Y':
          case 'y':
            logical[n] = true;
            break;
          default:
            logical[n] = false;
            break;
        }
      default:
        return -1;
    }

    return 0;
  }
Method to read an entry from the data stream.  The stream is assumed to be
in the right spot for reading.  This method should be called from something
controlling the reading of the entire file.

@see DbaseFile