final void printOut(String linePrefix) {
        if (!Double.isNaN(informationDensity)) {
            System.out.printf(linePrefix + "Estimated information density: %.1f%% (%.2f b/B)\n",
                    new Double(informationDensity * 100),
                    new Double(informationDensity * 8));
        } else {
            System.out.println(linePrefix + "Estimated information density: 0/0");
        }
        System.out.println(linePrefix + "Number of distinct bytes seen: " + distinctBytes);
        System.out.println(linePrefix + "Frequency of byte values as percentages:");
        System.out.print(linePrefix + "  ");
        for (int i = 0; i < 16; i++) {
            System.out.printf("    %1X", new Integer(i));
        }
        System.out.println();
        System.out.print(linePrefix + "  ");
        for (int i = 0; i < 83; i++) {
            System.out.print('-');
        }
        System.out.println();
        int[] colSums = new int[16];
        for (int row = 0; row < 16; row++) {
            System.out.printf("%s%1X |", linePrefix, new Integer(row));
            int rowSum = 0;
            for (int col = 0; col < 16; col++) {
                int count = counts[row * 16 + col];
                rowSum += count;
                colSums[col] += count;
                printCount(count, size);
            }
            System.out.print(" |");
            printCount(rowSum, size);
            System.out.println();
        }
        System.out.print(linePrefix + "  ");
        for (int i = 0; i < 83; i++) {
            System.out.print('-');
        }
        System.out.println();
        System.out.print(linePrefix + "   ");
        for (int i = 0; i < 16; i++) {
            printCount(colSums[i], size);
        }
        System.out.println();
    }