コード例 #1
0
  public byte[] getData() {
    byte[] result = new byte[length()];
    int offset = 0;
    System.arraycopy(sbSig, 0, result, offset, sbSig.length);
    offset += sbSig.length;
    System.arraycopy(sbBlkSize, 0, result, offset, sbBlkSize.length);
    offset += sbBlkSize.length;
    System.arraycopy(sbBlkCount, 0, result, offset, sbBlkCount.length);
    offset += sbBlkCount.length;

    System.arraycopy(sbDevType, 0, result, offset, sbDevType.length);
    offset += sbDevType.length;

    System.arraycopy(sbDevId, 0, result, offset, sbDevId.length);
    offset += sbDevId.length;

    System.arraycopy(sbData, 0, result, offset, sbData.length);
    offset += sbData.length;

    System.arraycopy(sbDrvrCount, 0, result, offset, sbDrvrCount.length);
    offset += sbDrvrCount.length;
    for (DriverDescriptorEntry dde : entries) {
      byte[] tmp = dde.getData();
      System.arraycopy(tmp, 0, result, offset, tmp.length);
      offset += tmp.length;
    }
    System.arraycopy(ddPad, 0, result, offset, ddPad.length);
    offset += ddPad.length;
    // System.arraycopy(, 0, result, offset, .length); offset += .length;
    if (offset != length()) throw new RuntimeException("Internal miscalculation...");
    else return result;
  }
コード例 #2
0
  public DriverDescriptorRecord(byte[] data, int offset) {
    if ((data.length - offset) < 18) {
      throw new RuntimeException(
          "Insufficient remaining data in "
              + "buffer for a "
              + this.getClass().getName()
              + " "
              + "(remaining: "
              + (data.length - offset)
              + " bytes, "
              + "required: 18 bytes).");
    }

    System.arraycopy(data, offset + 0, sbSig, 0, 2);
    System.arraycopy(data, offset + 2, sbBlkSize, 0, 2);
    System.arraycopy(data, offset + 4, sbBlkCount, 0, 4);
    System.arraycopy(data, offset + 8, sbDevType, 0, 2);
    System.arraycopy(data, offset + 10, sbDevId, 0, 2);
    System.arraycopy(data, offset + 12, sbData, 0, 4);
    System.arraycopy(data, offset + 16, sbDrvrCount, 0, 2);

    int numEntries = getSbDrvrCount();
    if (numEntries * DriverDescriptorEntry.length() > (data.length - offset - 18)) {
      numEntries = (data.length - offset - 18) / DriverDescriptorEntry.length();
    }

    entries = new DriverDescriptorEntry[numEntries];
    int i;
    for (i = 0; i < entries.length; ++i)
      entries[i] =
          new DriverDescriptorEntry(data, offset + 18 + DriverDescriptorEntry.length() * i);

    int padOffset = offset + 18 + DriverDescriptorEntry.length() * i;
    int padLength = getSbBlkSize() - padOffset;
    if (((data.length - offset) - padOffset) < padLength) {
      padLength = (data.length - offset) - padOffset;
    }

    ddPad = new byte[padLength];
    System.arraycopy(data, offset + padOffset, ddPad, 0, ddPad.length);
  }
コード例 #3
0
 public int length() {
   return 18 + entries.length * DriverDescriptorEntry.length() + ddPad.length;
 }