public DataItem searchItem(String key) {
        Node posNode = root;

        while (true) {

            if (posNode == null) {
                break;
            }

            int itemPos;
            System.out.println("================node :" + posNode.getCount());
            for (itemPos = 0; itemPos < posNode.getCount(); itemPos++) {
                DataItem currentItem = posNode.getDataItems()[itemPos];
                System.out.println("compare key :" + currentItem.getKey());
                if (key.equals(currentItem.getKey())) {
                    return currentItem;
                } else if (key.compareTo(currentItem.getKey()) < 0) {
                    if (posNode.isLeaf()) {
                        return null;
                    } else {
                        posNode = StorageUtils.loadNode(storage, posNode.getChild()[itemPos].getStoragePointer());
                        break;
                    }
                } else {
                    if (itemPos == posNode.getCount() - 1) {
                        if (posNode.isLeaf()) {
                            return null;
                        } else {
                            posNode = StorageUtils.loadNode(storage, posNode.getChild()[posNode.getCount()].getStoragePointer());
                            break;
                        }
                    }
                }
            }
        }
        return null;
    }