code: public long size() throws IOException {
  		if (filter == null) return size;
  		if (filteredSize == - 1) {
  			long c = 0;
  			final long[] triple = new long[3];
  			final ByteBuffer iteratorByteBuffer = ByteBuffer.allocateDirect(BUFFER_SIZE).order(ByteOrder.nativeOrder());
  			for(int i = 0; i < DISK_CHUNKS; i++) {
  				if (filter == null) c += count[i];
  				else {
  					flushAll();
  					@SuppressWarnings("resource")
  					final ReadableByteChannel channel = new FileInputStream(file[i]).getChannel();
  					iteratorByteBuffer.clear().flip();
  					for(int j = 0; j < count[i]; j++) {
  						triple[0] = readLong(iteratorByteBuffer, channel);
  						triple[1] = readLong(iteratorByteBuffer, channel);
  						triple[2] = readLong(iteratorByteBuffer, channel);
  						if (hashMask == 0) readLong(iteratorByteBuffer, channel);
  						if (filter.evaluate(triple)) c++;
  					}
  					channel.close();
  				}
  			}
  
  			filteredSize = c;
  		}
  		return filteredSize;
  	}
docs: Returns the size of this store. Note that if you set up
  a {@linkplain #filter(Predicate) filter}, the first call to
  this method will require a scan to the whole store.
  
  @return the number of (possibly filtered) triples of this store.