最後にStringとして返しますが、そうすると日本語とか復元できません。
これはAPIにも書いてあります。
そこでreadLineのコードをちょこっと改造してみました。
---
/**
* <code>RandomAccessFile.read</code>で読み込んだバイト配列を
* UTF-8エンコードした<code>String</code>で返します。
* EOFに達するとnullを返します。
* @param f
* @return
* @throws IOException
*/
public static String readLineRandomAccessFileUTF(final RandomAccessFile f)
throws IOException {
List<Byte> input = new ArrayList<Byte>();
int c = -1;
boolean eol = false;
while (!eol) {
switch (c = f.read()) {
case -1: //EOFに達した場合
case '\n':
eol = true;
break;
case '\r':
eol = true;
long cur = f.getFilePointer();
if ((f.read()) != '\n') {
f.seek(cur);
}
break;
default:
input.add((byte)c);
break;
}
}
if ((c == -1) && (input.size() == 0)) {
return null;
}
byte[] bytes = new byte[input.size()];
for(int i=0;i<input.size();i++){
bytes[i]=input.get(i);
}
return new String(bytes, "utf8");
}
---
今回はテストケース無しです。
0 件のコメント:
コメントを投稿