Beispiel #1
0
  /**
   * @param recordBb
   * @param dgBlock
   * @param cgBlock
   * @param cnBlock
   * @return
   * @throws IOException
   */
  public static ByteBuffer readStringValues(
      ByteBuffer recordBb, DGBLOCK dgBlock, CGBLOCK cgBlock, CNBLOCK cnBlock) throws IOException {
    // put pointer to start of record area
    recordBb.rewind();

    byte[] target = new byte[0];

    // iterate over records
    for (int i = 0; i < cgBlock.getNoOfRecords(); i++) {

      // read record
      int recordIdOffset = (dgBlock.getNoRecordIds() > 0) ? 1 : 0;
      byte[] record = new byte[cgBlock.getDataRecordSize() + recordIdOffset];
      recordBb.get(record);

      // skip first bits and read value
      BitInputStream bis = new BitInputStream(record);
      int skipBits =
          (recordIdOffset * 8) + (cnBlock.getByteOffset() * 8) + cnBlock.getNumberOfFirstBits();
      bis.skip(skipBits);
      byte[] b = bis.readByteArray(cnBlock.getNumberOfBits());

      // build string value and append
      StringBuffer sb = new StringBuffer();
      sb.append(Mdf3Util.readChars(ByteBuffer.wrap(b), b.length));
      sb.append((char) '\0');

      // add to target
      byte[] src = sb.toString().getBytes();
      byte[] dest = new byte[target.length + src.length];
      System.arraycopy(target, 0, dest, 0, target.length);
      System.arraycopy(src, 0, dest, target.length, src.length);
      target = dest;
    }

    return ByteBuffer.wrap(target);
  }
Beispiel #2
0
  /**
   * Read the values from the source records.
   *
   * @param recordBb
   * @param dgBlock
   * @param cgBlock
   * @param cnBlock
   * @return
   * @throws IOException
   */
  public static ByteBuffer readNumberValues(
      ByteBuffer recordBb, DGBLOCK dgBlock, CGBLOCK cgBlock, CNBLOCK cnBlock) throws IOException {
    // put pointer to start of record area
    recordBb.rewind();

    // allocate target buffer (byte)
    int targetValueSize = cnBlock.getNumberOfBits() / 8;
    if (cnBlock.getNumberOfBits() % 8 != 0) {
      targetValueSize++;
    }

    int numberOfTotalBytes = (int) (targetValueSize * cgBlock.getNoOfRecords());
    ByteBuffer target = ByteBuffer.allocate(numberOfTotalBytes);

    // iterate over records
    for (int i = 0; i < cgBlock.getNoOfRecords(); i++) {

      // read record
      int recordIdOffset = (dgBlock.getNoRecordIds() > 0) ? 1 : 0;
      byte[] record = new byte[cgBlock.getDataRecordSize() + recordIdOffset];
      recordBb.get(record);

      // skip first bits and read value
      BitInputStream bis = new BitInputStream(record);
      int skipBits =
          (recordIdOffset * 8) + (cnBlock.getByteOffset() * 8) + cnBlock.getNumberOfFirstBits();
      bis.skip(skipBits);
      byte[] b = bis.readByteArray(cnBlock.getNumberOfBits());

      // add to buffer
      target.put(b);
    }

    target.rewind();
    return target;
  }