package rescuecore2.connection; /** Utility class for logging raw bytes. Handy for debugging. */ public final class ByteLogger { private static final Object LOCK = new Object(); /** Utility class: private constructor. */ private ByteLogger() {} /** Log a byte array. @param bytes The bytes to log. */ public static void log(byte[] bytes) { log(bytes, null); } /** Log a byte array. @param bytes The bytes to log. @param header A header to print out. */ public static void log(byte[] bytes, String header) { synchronized (LOCK) { if (header != null) { System.err.println(header); } // CHECKSTYLE:OFF:MagicNumber System.err.println(bytes.length + "-byte message"); System.err.println("Offset Hex Int"); for (int i = 0; i < bytes.length; i += 4) { byte b1 = bytes[i]; byte b2 = (i + 1) >= bytes.length ? 0 : bytes[i + 1]; byte b3 = (i + 2) >= bytes.length ? 0 : bytes[i + 2]; byte b4 = (i + 3) >= bytes.length ? 0 : bytes[i + 3]; int v1 = (int)(bytes[i] & 0xFF); int v2 = (i + 1) >= bytes.length ? 0 : (int)(bytes[i + 1] & 0xFF); int v3 = (i + 2) >= bytes.length ? 0 : (int)(bytes[i + 2] & 0xFF); int v4 = (i + 3) >= bytes.length ? 0 : (int)(bytes[i + 3] & 0xFF); System.err.printf("%1$-8d 0x%2$02x%3$02x%4$02x%5$02x %6$3d %7$3d %8$3d %9$3d%n", i, b1, b2, b3, b4, v1, v2, v3, v4); } // CHECKSTYLE:ON:MagicNumber } } }