예제 #1
0
  public byte[] create() throws IOException {
    List<Patch> patches = this.project.getIncludedPatches();

    int length = 0;
    length += HEADER_LENGTH;

    int indicesLength = Offset.SIZE * patches.size();
    length += indicesLength;

    byte[] metadataBytes = project.getAuthor().getBytes("UTF-8");
    length += metadataBytes.length;

    length += (Offset.SIZE * patches.size());

    for (Patch patch : patches) {
      length += patch.getValue().getBytesLength();
    }

    byte[] mod = new byte[length];

    writeBytes(mod, new byte[] {(byte) 0xFF, 0x50, 0x54, 0x50, 0x00, (byte) patches.size()}, 0);
    writeBytes(mod, metadataBytes, HEADER_LENGTH + indicesLength);

    int patchStart = HEADER_LENGTH + indicesLength + metadataBytes.length;

    for (int i = 0; i < patches.size(); i++) {
      Patch patch = patches.get(i);

      writeBytes(mod, Value.intToByteArray(patchStart), HEADER_LENGTH + Offset.SIZE * i);
      int offsetBytesLength = writeBytes(mod, patch.getOffset().getBytes(), patchStart);
      int valueBytesLength = writeBytes(mod, patch.getValue().getBytes(), patchStart + Offset.SIZE);

      patchStart += (offsetBytesLength + valueBytesLength);
    }
    return mod;
  }