protected <T extends Writable> T readFields(byte[] bytes, T writable) throws IOException {
    Preconditions.checkNotNull(bytes, "Input bytes are null");
    Preconditions.checkNotNull(writable, "Writable is null");
    buf.reset(bytes, bytes.length);
    writable.readFields(buf);
    return writable;
  }
protected <T extends Writable> T readFields(byte[] bytes, T writable) throws IOException {
    Preconditions.checkNotNull(bytes, "Input bytes are null");
    Preconditions.checkNotNull(writable, "Writable is null");
    buf.reset(bytes, bytes.length);
    writable.readFields(buf);
    return writable;
  }
protected < T extends Writable > T readFields ( byte [ ] bytes , T writable ) throws IOException { Preconditions . checkNotNull ( bytes , "Input bytes are null" ) ; Preconditions . checkNotNull ( writable , "Writable is null" ) ; buf . reset ( bytes , bytes . length ) ; writable . readFields ( buf ) ; return writable ; }
Deserializes raw bytes into a Writable instance, returning that instance. This implementation
relies on derived classes to initialize {@link #writable} before this method is called.

@param bytes serialized Writable data.
@param writable Writable instance into which data should be stored.
@return {@code writable}.
@throws IllegalArgumentException if either argument is {@code null}.
@throws IOException
Deserializes raw bytes into a Writable instance returning that instance . This implementation relies on derived classes to initialize { @link #writable } before this method is called .