code: void readCheckpointFull(InputStream is)
      throws IOException
    {
      _blobTail = BitsUtil.readInt16(is);
      
      if (_blobTail < 0 || _buffer.length < _blobTail) {
        throw new IllegalStateException("Invalid blob tail: " + _blobTail
                                        //+ " pos=" + (is.getPosition() - 2)
                                        + " " + this);
      }
      
      byte []buffer = _buffer;
      
      IoUtil.readAll(is, buffer, 0, _blobTail);
      
      int rowLength = BitsUtil.readInt16(is);
      
      rowHead(_buffer.length - rowLength);
      
      int rowHead = rowHead();
      
      if (rowHead < getBlobTail() || buffer.length < rowHead) {
        throw new IllegalStateException(L.l("Invalid row-head={0} blob-tail={1}",
                                            rowHead(), getBlobTail()));
      }
      IoUtil.readAll(is, buffer, rowHead, buffer.length - rowHead);
      
      // validateBlock(row);    
    }
docs: Reads a full block checkpoint.
  
  <pre><code>
  blobLen int16
  blobData {blobLen}
  rowLen int16
  rowData {rowLen}
  </code></pre>