Chinaunix首页 | 论坛 | 博客
  • 博客访问: 109289
  • 博文数量: 16
  • 博客积分: 55
  • 博客等级: 民兵
  • 技术积分: 235
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-25 21:49
个人简介

我的观点,您的建议!如有问题,敬请留言!

文章存档

2013年(12)

2012年(4)

我的朋友

分类: Java

2013-04-25 13:56:28

 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 都会错,原因一样的

阅读(2011) | 评论(0) | 转发(0) |
0

上一篇:eclipse 快捷键

下一篇:c 语言的一些知识

给主人留下些什么吧!~~