RandomAccessFile read = null;
try{
read = new RandomAccessFile(file,"r");
long start = read.getFilePointer();
long currect = start + r.length()-1;
String result = "";
read.seek(currect);
int d=-1;
while(currect>=start){
d = read.read() = read.readByte(); //如果换成 char d = read.readchar(),就会发生很有趣的事情,
// 在seek()偶数字节时,读就对,奇数时就错了.
if(d=='\n'||d=='\r'){
read.seek(currect+1);
result = read.readLine();
// do more handle about the result here
// ...
}
currect--;
}
}finally{
if(read!=null)
read.close();
}
原因是:
java中一个字符(char)是2个字节
raf.seek(Integer.parseInt(s));
这个方法的参数是指定偏移的字节数
seek方法参数 readChar方法读取位置 readChar读取内容
0 文件开始 第一个字符
1 第一个字节之后开始 第一个字符的第二个字节
第二个字符第一个字节
2 第二个字节之后开始 第二个字符
所以,很容易理解为什么参数是奇数,无法读取,因为读取的根本不是一个字符的2个字节,而是分别读取了2个字符的半个字节
其实如果你写入的是long类型,可能你输入1,2,3,4,5,6,7 都会错,原因一样的
阅读(2066) | 评论(0) | 转发(0) |