1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.mina.core.buffer;
21
22
23
24
25
26
27
28
29
30 class IoBufferHexDumper {
31 private static final byte[] highDigits;
32
33 private static final byte[] lowDigits;
34
35
36 static {
37 final byte[] digits = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
38 '9', 'A', 'B', 'C', 'D', 'E', 'F' };
39
40 int i;
41 byte[] high = new byte[256];
42 byte[] low = new byte[256];
43
44 for (i = 0; i < 256; i++) {
45 high[i] = digits[i >>> 4];
46 low[i] = digits[i & 0x0F];
47 }
48
49 highDigits = high;
50 lowDigits = low;
51 }
52
53 public static String getHexdump(IoBuffer in, int lengthLimit) {
54 if (lengthLimit == 0) {
55 throw new IllegalArgumentException("lengthLimit: " + lengthLimit
56 + " (expected: 1+)");
57 }
58
59 boolean truncate = in.remaining() > lengthLimit;
60 int size;
61 if (truncate) {
62 size = lengthLimit;
63 } else {
64 size = in.remaining();
65 }
66
67 if (size == 0) {
68 return "empty";
69 }
70
71 StringBuffer out = new StringBuffer(in.remaining() * 3 - 1);
72
73 int mark = in.position();
74
75
76 int byteValue = in.get() & 0xFF;
77 out.append((char) highDigits[byteValue]);
78 out.append((char) lowDigits[byteValue]);
79 size--;
80
81
82 for (; size > 0; size--) {
83 out.append(' ');
84 byteValue = in.get() & 0xFF;
85 out.append((char) highDigits[byteValue]);
86 out.append((char) lowDigits[byteValue]);
87 }
88
89 in.position(mark);
90
91 if (truncate) {
92 out.append("...");
93 }
94
95 return out.toString();
96 }
97 }