I need to create a client function that allows paging of scan results
(initially return results 1-20, then click on page to to show results
21-40, 41-60, etc.) without needing to remember the start rowkey.  I
beleive that a filter would be far more efficient than implementing the
logic client-side.  I couldn't find any OOTB filter for this functionality
so I wrote the class below.  It seems to work fine for me, but can anyone
comment if this approach makes sense?  Is there another OOTB filter that I
can use instead?

Thank you,


import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import org.apache.hadoop.hbase.filter.FilterBase;
public class PageOffsetFilter extends FilterBase {
 private long startRowCount;
 private long endRowCount;

 private int count = 0;
 public PageOffsetFilter() {

 public PageOffsetFilter(long pageNumber, long pageSize) {


  startRowCount = (pageNumber - 1) * pageSize;
  endRowCount = (pageSize * pageNumber)-1;
 public boolean filterAllRemaining() {
  return count > endRowCount;
 public boolean filterRow() {

  if(count <= startRowCount) {
   return true;
  } else {
   return false;


 public void readFields(DataInput dataInput) throws IOException {

  this.startRowCount = dataInput.readLong();
  this.endRowCount = dataInput.readLong();
 public void write(DataOutput dataOutput) throws IOException {