Divide(Range range) { long half = range.getLength() / 2; test = new Range(range.getStartIndex(), half); other = new Range(test.getEndIndex(), range.getLength() - half); // construct the skip range from the skipRanges skipRange = new SortedRanges(); for (Range r : skipRanges.getRanges()) { skipRange.add(r); } skipRange.add(new Range(0, test.getStartIndex())); skipRange.add(new Range(test.getEndIndex(), (Long.MAX_VALUE - test.getEndIndex()))); }