public void append(Writable val) throws IOException {

      if (!(val instanceof BytesRefArrayWritable)) {
        throw new UnsupportedOperationException(
            "Currently the writer can only accept BytesRefArrayWritable");
      }

      BytesRefArrayWritable columns = (BytesRefArrayWritable) val;
      int size = columns.size();
      for (int i = 0; i < size; i++) {
        BytesRefWritable cu = columns.get(i);
        int plainLen = cu.getLength();
        columnBufferSize += plainLen;
        columnValuePlainLength[i] += plainLen;
        columnBuffers[i].append(cu);
      }

      if (size < columnNumber) {
        for (int i = columns.size(); i < columnNumber; i++) {
          columnBuffers[i].append(BytesRefWritable.ZeroBytesRefWritable);
        }
      }

      bufferedRecords++;
      if ((columnBufferSize > columnsBufferSize)
          || (bufferedRecords >= RECORD_INTERVAL)) {
        flushRecords();
      }
    }
Append a row of values. Currently it only can accept &lt;
{@link BytesRefArrayWritable}. If its <code>size()</code> is less than the
column number in the file, zero bytes are appended for the empty columns.
If its size() is greater then the column number in the file, the exceeded
columns' bytes are ignored.

@param val a BytesRefArrayWritable with the list of serialized columns
@throws IOException
ql/src/java/org/apache/hadoop/hive/ql/io/RCFile.java