public int internalNodeSearch(DeweyID deweyId) {
    // page: pagestate,nextpage,freeoffset
    // ps,isroot,isleaf,number of keys in this
    // page,freeoff,nextp(leftmost),deweyId,nextp,deweyId,nextp(rightmost)
    int pagePointer = -1; // null
    int length;
    byte[] curId;
    DeweyID curDId = null;
    DeweyID result = null;
    InternalBuffer.position(Settings.dataStartPos); // 3+4+4 ps+isL+isR+freeOff+numOf
    // if(IsRoot() & IsLeaf()& freeOffset==Settings.dataStartPos)
    if (numOfKeys > 0) {
      for (int i = 0; i < numOfKeys; i++) {
        pagePointer = InternalBuffer.getInt(); // next page adrs
        length = InternalBuffer.getInt();
        curId = new byte[length];
        InternalBuffer.get(curId, 0, length);
        curDId = new DeweyID();
        curDId.setDeweyId(curId);
        result = curDId;
        if (!(curDId.notGreaterThan(deweyId))) {
          break;
        }
      }
      if (curDId.notGreaterThan(deweyId)) // baraye akharin curID(rightMost)
      {
        pagePointer = InternalBuffer.getInt(); // the last (right most)pointer
      }
    }
    return pagePointer; // page i ro bar migardune k result max un hast.
    // ki<k<ki+1

  }