pig/src/main/java/com/twitter/elephantbird/pig/util/WritableLoadCaster.java
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