使用 RandomAccessFile 时读取文件乱码

Read file garbled when using RandomAccessFile

首先,我使用这段代码在一个文件中写了两行:

String lineSeparator = System.getProperty("line.separator", "\n");
String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "test1.txt";
RandomAccessFile randomAccessFile = new RandomAccessFile(filePath, "rw");

randomAccessFile.writeUTF("aaaaaaaaaaaaaaaaaaaaa");
randomAccessFile.write(lineSeparator.getBytes());
randomAccessFile.writeUTF("bbbbbbbbbbbbbbbbbbbb");
randomAccessFile.write(lineSeparator.getBytes());

randomAccessFile.close();

写入文件后,我读取文件:

RandomAccessFile randomAccessFile = new RandomAccessFile(file, "r");
int i = 0;
String line;
while ((line = randomAccessFile.readLine()) != null) {
    Log.i("log", (i++)+" : "+line);
}
randomAccessFile.close();

但是奇怪的事情发生了,每一行开头都是一个��,我也不知道是什么

完整日志:

07-13 07:21:41.027 1138-1138/? I/log: 0 : ��aaaaaaaaaaaaaaaaaaaaa
07-13 07:21:41.027 1138-1138/? I/log: 1 : ��bbbbbbbbbbbbbbbbbbbb

什么是乱码,是行分隔符吗?还有,我怎样才能正确读取文件?


我尝试使用 writeChars 而不是 writeUTF,但是日志中出现了更多乱码:

07-13 08:14:26.352 16821-16821/? I/log: 0 : ��a��a��a��a��a��a��a��a��a��a��a��a��a��a��a��a��a��a��a��a��a
07-13 08:14:26.352 16821-16821/? I/log: 1 : ��b��b��b��b��b��b��b��b��b��b��b��b��b��b��b��b��b��b��b��b
randomAccessFile.writeUTF("aaaaaaaaaaaaaaaaaaaaa");
randomAccessFile.write(lineSeparator.getBytes());
randomAccessFile.writeUTF("bbbbbbbbbbbbbbbbbbbb");
randomAccessFile.write(lineSeparator.getBytes());
randomAccessFile.close();

唯一的阅读方式是:

String aaa = randomAccessFile.readUTF();
randomAccessFile.readFully(lineSeparator.getBytes());
String bbb = randomAccessFile.readUTF();
randomAccessFile.readFully(lineSeparator.getBytes());

可以看出写行分隔符完全是浪费时间space。

简而言之,writeUTF()写入的数据只能被readUTF()读取。

查看 Javadoc。