Java bytes[] (buffer) hexa dump

Sok évnyi Zorp log nézegetés után egyféle hexa dumpra áll rá a szemem, amit implementáltam Java-ban.

Első változat, egyelőre ellátja a feladatát:

 
public static void logBytes(Logger logger, byte[] bytes) {
    if (!logger.isLoggable(Level.FINE))
        return;

    int offset = 0;
    while (offset < bytes.length) {
        StringBuilder builder = new StringBuilder();
        builder.append(String.format("data line 0x%04x: ", offset));
        for (int i = 0; i != 16; ++i) {
            if (offset + i < bytes.length)
                builder.append(String.format("%02x ", bytes[offset + i]));
            else
                builder.append("   ");
        }

        builder.append(" ");
        for (int i = 0; i != 16; ++i) {
            int idx = offset + i;
            if (idx < bytes.length) {
                if (bytes[idx] >= 32 && bytes[idx] <= 126)
                    builder.append(String.format("%c", bytes[idx]));
                else
                    builder.append(".");
            }
        }

        logger.fine(builder::toString);
        offset += 16;
    }
}

Hozzászólások

Nincs is jobb mint hexa dump alapján hibát keresni! Talán csak amikor elő kell venni az oszcilloszkópot is. De azt már pláne nehéz Java-val összefüggésbe hozni.

Valóban, de tapasztalat, hogy sokszor a hexa dump kifejezetten jól olvasható, ha nem titkosított adat van benne, még bináris protokollok esetén is (RDP, SSH, ...).

Ha erre szükség van, akkor a kevésbé beszédes log túl kevés, esetleg csak a hexdumpból látszódik, hogy benne van a hiba oka is.