ファイルを1行ずつ処理する必要があり、行の先頭のオフセットを知りたいです。BufferedInputStreamにはreadLineがないため、独自のreadLineをコーディングしました。オフセット以外は正常に動作します。ファイルの長さが長くなると、offsetは誤った値を返します。私のコードの何が問題になっていますか?
class MyBufferedInputStream extends BufferedInputStream {
long offset = 0;
public MyBufferedInputStream(InputStream in) {
super(in);
}
public String readLine() throws IOException {
int b, i = 0;
byte[] buf = new byte[256];
while (true) {
b = read();
offset++;
if (b == -1)
return null;
else if (b == '\n')
return (new String(buf));
else // assume line in not longer than 256
buf[i++] = (byte) b;
}
}
public long getOffset() {
return offset;
}
public void resetOffset() {
offset = 0;
}
}