@Override
 protected void writeInternal(ObjectDataOutput out) throws IOException {
   super.writeInternal(out);
   out.writeBoolean(retain);
   out.writeInt(valueSet.size());
   for (Data value : valueSet) {
     value.writeData(out);
   }
 }
 @Override
 protected void readInternal(ObjectDataInput in) throws IOException {
   super.readInternal(in);
   retain = in.readBoolean();
   final int size = in.readInt();
   valueSet = new HashSet<Data>(size);
   for (int i = 0; i < size; i++) {
     final Data value = new Data();
     value.readData(in);
     valueSet.add(value);
   }
 }
 @Override
 protected void readInternal(ObjectDataInput in) throws IOException {
   super.readInternal(in);
   value = new Data();
   value.readData(in);
 }
 @Override
 protected void writeInternal(ObjectDataOutput out) throws IOException {
   super.writeInternal(out);
   value.writeData(out);
 }