@Override protected void dehydrateValues() { TCByteBufferOutputStream outputStream = getOutputStream(); // We don't want to use the NVpair stuff: it is horrendously complicated, doesn't work well // with all types, and doesn't buy us anything. putNVPair(RECEIVED_ID, receivedIDs != null ? receivedIDs.size() : 0); if (receivedIDs != null) { for (TransactionID tid : receivedIDs) { outputStream.writeLong(tid.toLong()); } } putNVPair(TRANSACTION_ID, retiredIDs != null ? retiredIDs.size() : 0); if (retiredIDs != null) { for (TransactionID tid : retiredIDs) { outputStream.writeLong(tid.toLong()); } } putNVPair(RESULTS_ID, results != null ? results.size() : 0); if (results != null) { for (Map.Entry<TransactionID, byte[]> entries : results.entrySet()) { outputStream.writeLong(entries.getKey().toLong()); outputStream.writeInt(entries.getValue().length); outputStream.write(entries.getValue()); } } }