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 class IoBufferHexDumper {
29
30
31
32
33 private static final byte[] highDigits;
34
35
36
37
38 private static final byte[] lowDigits;
39
40
41
42
43 static {
44 final byte[] digits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
45
46 int i;
47 byte[] high = new byte[256];
48 byte[] low = new byte[256];
49
50 for (i = 0; i < 256; i++) {
51 high[i] = digits[i >>> 4];
52 low[i] = digits[i & 0x0F];
53 }
54
55 highDigits = high;
56 lowDigits = low;
57 }
58
59
60
61
62
63
64
65
66
67
68
69 public static String getHexdump(IoBuffer in, int length) {
70 if (length < 0) {
71 throw new IllegalArgumentException("length: " + length + " must be non-negative number");
72 }
73
74 int pos = in.position();
75 int rem = in.limit() - pos;
76 int items = Math.min(rem, length);
77
78 if (items == 0) {
79 return "";
80 }
81
82 int lim = pos + items;
83
84 StringBuilder out = new StringBuilder((items * 3) + 6);
85
86 {
87 int byteValue = in.get(pos++) & 0xFF;
88 out.append((char) highDigits[byteValue]);
89 out.append((char) lowDigits[byteValue]);
90 }
91
92 for (; pos < lim;) {
93 out.append(' ');
94 int byteValue = in.get(pos++) & 0xFF;
95 out.append((char) highDigits[byteValue]);
96 out.append((char) lowDigits[byteValue]);
97 }
98
99 if (items != rem) {
100 out.append("...");
101 }
102
103 return out.toString();
104 }
105 }