は、あなたが改行を検索し、あなたが最初のスペースを見つけるまで後方に作業する必要がある
{string possibly with spaces} {integer}\r?\n
のようなものです。数字を自分でデコードしてint
に変換するか、それを文字列に変換して解析することができます。あなたがしなければ私は整数を使用しません。ラインの開始位置と整数の始まりを知ったら、文字列をバイトとして抽出し、必要なエンコーディングを使ってStringに変換できます。
これは、改行とスペースがエンコーディングで1バイトであることを前提としています。マルチバイトのバイトであれば、さらに複雑になります。
EDIT:次の例のプリント...
text: ' someString', number: 8
text: 'some other string', number: -88
コード
ByteBuffer bb = ByteBuffer.wrap(" someString 8\r\nsome other string -88\n".getBytes());
while(bb.remaining()>0) {
int start = bb.position(),end, ptr;
for(end = start;end < bb.limit();end++) {
byte b = bb.get(end);
if (b == '\r' || b == '\n')
break;
}
// read the number backwards
long value = 0;
long tens = 1;
for(ptr = end-1;ptr>= start;ptr--) {
byte b = bb.get(ptr);
if (b >= '0' && b <= '9') {
value += tens * (b - '0');
tens *= 10;
} else if (b == '-') {
value = -value;
ptr--;
break;
} else {
break;
}
}
// assume separator is a space....
byte[] bytes = new byte[ptr-start];
bb.get(bytes);
String text = new String(bytes, "UTF-8");
System.out.println("text: '"+text+"', number: "+value);
// find the end of the line.
if (bb.get(end) == '\r') end++;
bb.position(end+1);
}
、そして、私はバッファ*で始まります*リーダーとしてのベース。 ByteBufferはいくつかの点で良いです。これは一般的ではありません。 –