public DataTable getPage(int index, int size) {
        DataTable result = this;
        DataRow row;
        log.debug(String.format("method start int[index:%d],int[size:%d]", index, size));
        if (size > 0) {
            int total = this.rows.size();
            if (index <= 0) {
                index = 1;
            }
            int begin = (index - 1) * size;
            int end = index * size;
            if (begin > total) {
                begin = (total % size == 0 ? total - size : total - (size - 1) * (total - 1)) + 1;
                end = total;
            } else {
                if (end > total) {
                    end = total;
                }
            }
            result = clone();
            for (int i = begin; i < end; i++) {
                row = result.newRow(false);
                row.putAll(this.rows.get(i));
                result.rows.add(row);
            }
        }
        log.debug(String.format("method stop return:DataTable[%s]", result));
        return result;
    }