ByteBuffer 相关的数据处理片段 public static final ByteBuffer readLine(ByteBuffer buffer) {ByteBuffer result = ByteBuffer.allocate(buffer.remaining());byte chaz = -1;int position = 0;while (buffer.hasRemaining()) {chaz = buffer.get(
public static final ByteBuffer readLine(ByteBuffer buffer) {
ByteBuffer result = ByteBuffer.allocate(buffer.remaining());
byte chaz = -1;
int position = 0;
while (buffer.hasRemaining()) {
chaz = buffer.get();
if (chaz == (byte) '\r') {
position = buffer.position();
chaz = buffer.get();
if (chaz == (byte) '\n') {
position = buffer.position();
break;
}
break;
} else if (chaz == (byte) '\n') {
position = buffer.position();
break;
} else {
result.put(chaz);
}
}
result.limit(result.position());
result.position(0);
buffer.position(position);
return result;
}
public static final String toString(ByteBuffer buffer, Charset charset) {
return charset.decode(buffer).toString();
}
public static final ByteBuffer toByteBuffer(String src, Charset charset) {
return charset.encode(src);
}
public static final String readLine(ByteBuffer buffer, Charset charset) {
ByteBuffer line = readLine(buffer);
return charset.decode(line).toString();
}
public static void main(String[] args) {
Charset charset = Charset.forName("utf-8");
String src = "こんにちは";
ByteBuffer buffer = toByteBuffer(src, charset);
System.out.println(toString(buffer, charset));
System.out.println("=========================");
src = "こんにちは\r\nこ\rん\rに\nち\nは\n";
buffer = toByteBuffer(src, charset);
while(buffer.position() < buffer.limit()) {
System.out.println(toString(readLine(buffer), charset));
}
}
