============================
我自己的测试
============================
RandomAccessFile rand = new RandomAccessFile("/tmp/test_log", "rw");
System.out.print("file created"); //======lineA======
while (true) {
Thread.sleep(8000);
System.out.print("finish sleeping");
int i = (int) rand.length(); //=====lineB=====
rand.seek(0); // Seek to start point of file
for (int ct = 0; ct < i; ct++) {
byte b = rand.readByte(); // read byte from the file
System.out.print((char) b); // convert byte into char
}
}
测试用例1:
在 lineB 之前删除 lineA 之后的 test_log 文件,它完成读取整个文件而没有任何问题/异常。
测试用例 2:
mv /tmp/test_log /tmp/test_log.bk 在 lineA 之后 lineB 之后,它再次完成读取整个文件而没有任何问题/异常。
测试用例 3:
在测试用例 2 之后,开始向 /tmp/test_log.bk 写入额外的行,
echo "test line1 bla bla" >> /tmp/test_log.bk
echo "test line2 bla bla" >> /tmp/test_log.bk
它现在读取整个文件的问题,另外,它还读取了 test_log.bk 中添加的新行。