public void fill(byte[] b) {
        int coordinate = 0;
        storagePointer = NumberUtils.byteArrayToInt(Arrays.copyOfRange(b,
                coordinate, coordinate + 4));
        coordinate += 4;
        int parent_storagePointer = NumberUtils.byteArrayToInt(Arrays.copyOfRange(
                b, coordinate, coordinate + 4));
        coordinate += 4;
        if (parent_storagePointer > 0) {
            parent = new Node(storage);
            parent.storagePointer = parent_storagePointer;
        }
        count = b[coordinate];
        coordinate += 1;
        isLeaf = b[coordinate] == 1 ? true : false;
        coordinate += 1;
        for (int i = 0; i < DATAITEMS_COUNT; i++) {
            if (i < count) {
                if (dataItems[i] == null)
                    dataItems[i] = new DataItem();
                dataItems[i].fill(Arrays.copyOfRange(b, coordinate, coordinate
                        + DataItem.BYTE_LENGTH));
            }
            coordinate += DataItem.BYTE_LENGTH;
        }
        for (int i = 0; i <= DATAITEMS_COUNT; i++) {
            if (!isLeaf && i <= count) {
                if (child[i] == null)
                    child[i] = new Node(this.storage);
                child[i].storagePointer = NumberUtils.byteArrayToInt(Arrays.copyOfRange(b, coordinate, coordinate + 4));
            }
            coordinate += 4;
        }
    }