public static RangeSliceReply read(byte[] body, int version) throws IOException {
   ByteArrayInputStream bufIn = new ByteArrayInputStream(body);
   DataInputStream dis = new DataInputStream(bufIn);
   int rowCount = dis.readInt();
   List<Row> rows = new ArrayList<Row>(rowCount);
   for (int i = 0; i < rowCount; i++) {
     rows.add(Row.serializer().deserialize(dis, version));
   }
   return new RangeSliceReply(rows);
 }
 public Message getReply(Message originalMessage) throws IOException {
   DataOutputBuffer dob = new DataOutputBuffer();
   dob.writeInt(rows.size());
   for (Row row : rows) {
     Row.serializer().serialize(row, dob, originalMessage.getVersion());
   }
   byte[] data = Arrays.copyOf(dob.getData(), dob.getLength());
   return originalMessage.getReply(
       GossipUtilities.getLocalAddress(), data, originalMessage.getVersion());
 }