in core/src/main/java/org/apache/mina/util/ByteBufferDumper.java [42:108]
public static String dump(ByteBuffer buffer, int nbBytes, boolean toAscii) {
byte data[];
int start;
int size = Math.min(buffer.remaining(), nbBytes >= 0 ? nbBytes : Integer.MAX_VALUE);
int length = buffer.remaining();
if (buffer.hasArray() && !buffer.isReadOnly()) {
start = buffer.position();
data = buffer.array();
} else {
data = new byte[size];
int oldpos = buffer.position();
buffer.get(data);
buffer.position(oldpos);
start = 0;
length = data.length;
}
// is not ASCII printable ?
boolean binaryContent = false;
if (toAscii) {
for (int i = start; i < start + size; i++) {
byte b = data[i];
if (((b < 32) || (b > 126)) && (b != 13) && (b != 10)) {
binaryContent = true;
break;
}
}
}
if (!toAscii || binaryContent) {
StringBuilder out = new StringBuilder(size * 3 + 30);
out.append("ByteBuffer[len=").append(length).append(",bytes='");
// fill the first
int byteValue = data[start] & 0xFF;
boolean isFirst = true;
// and the others, too
for (int i = start; i < start + size; i++) {
if (isFirst) {
isFirst = false;
} else {
out.append(' ');
}
byteValue = data[i] & 0xFF;
out.append(new String(new byte[] { '0', 'x', HEX_CHAR[(byteValue & 0x00F0) >> 4],
HEX_CHAR[byteValue & 0x000F] }));
}
out.append("']");
return out.toString();
} else {
StringBuilder sb = new StringBuilder(size);
sb.append("ByteBuffer[len=").append(length).append(",str='").append(new String(data, start, size))
.append("']");
return sb.toString();
}
}