private GameRecord extractGameRecord(ProcessorContext context, DataInputStream dis)
      throws IOException {
    int accountId = dis.readInt();
    int productId = dis.readInt();
    context.setProductId(productId);
    int recordId = dis.readInt();
    int playDuration = dis.readInt();
    int scores = dis.readInt();
    String remark = dis.readUTF();
    int dataLen = dis.readInt();
    byte[] data = null;
    if (dataLen > 0) {
      data = new byte[dataLen];
      int readLen = 0;
      int curReadLen = 0;
      while (readLen < data.length) {
        curReadLen = dis.read(data, readLen, data.length - readLen);
        if (curReadLen > 0) {
          readLen += curReadLen;
        }
      }
    }

    GameRecord record = new GameRecord();
    record.setAccountId(accountId);
    record.setRecordId(recordId);
    record.setPlayDuration(playDuration);
    record.setScores(scores);
    record.setRemark(remark);
    record.setTime(new java.util.Date());
    record.setData(data);

    return record;
  }