public RabinHashFunction64() {
  table32 = new long[256];
  table40 = new long[256];
  table48 = new long[256];
  table54 = new long[256];
  table62 = new long[256];
  table70 = new long[256];
  table78 = new long[256];
  table84 = new long[256];
  buffer = new byte[READ_BUFFER_SIZE];
  long[] mods = new long[P_DEGREE];
  mods[0] = POLY;
  for (int i = 0; i < 256; i++) {
   table32[i] = 0;
   table40[i] = 0;
   table48[i] = 0;
   table54[i] = 0;
   table62[i] = 0;
   table70[i] = 0;
   table78[i] = 0;
   table84[i] = 0;
  }
  for (int i = 1; i < P_DEGREE; i++) {
   mods[i] = mods[i - 1] << 1;
   if ((mods[i - 1] & X_P_DEGREE) != 0) {
    mods[i] = mods[i] ^ POLY;
   }
  }
  for (int i = 0; i < 256; i++) {
   long c = i;
   for (int j = 0; j < 8 && c != 0; j++) {
    if ((c & 1) != 0) {
     table32[i] = table32[i] ^ mods[j];
     table40[i] = table40[i] ^ mods[j + 8];
     table48[i] = table48[i] ^ mods[j + 16];
     table54[i] = table54[i] ^ mods[j + 24];
     table62[i] = table62[i] ^ mods[j + 32];
     table70[i] = table70[i] ^ mods[j + 40];
     table78[i] = table78[i] ^ mods[j + 48];
     table84[i] = table84[i] ^ mods[j + 56];
    }
    c >>>= 1;
   }
  }
 }