黑马程序员技术交流社区

标题: 关于RandomAccessFile的小问题 [打印本页]

作者: 吴亨    时间: 2011-12-16 14:47
标题: 关于RandomAccessFile的小问题
本帖最后由 吴亨 于 2011-12-17 12:57 编辑

import java.io.*;
public class TestFile {


        public static void main(String[] args) throws Exception
                 {
         Employee s1 = new Employee("zhangsan",21);
         Employee s2 = new Employee("lisi",23);
         Employee s3 = new Employee("wangwu",24);
         RandomAccessFile f = new RandomAccessFile("abc.txt","rw");
           f.write(s1.name.getBytes());
           f.writeInt(s1.age);
           f.write(s2.name.getBytes());
           f.writeInt(s2.age);
           f.write(s3.name.getBytes());
           f.writeInt(s3.age);
           f.close();
            final int LEN = 8;
           byte[] Buffer= new byte[8];
           f.skipBytes(LEN+4);
           f.read(Buffer);
           System.out.println(new String(Buffer)+","+f.read());
           f.seek(0);
           Buffer = null;
           f.read(Buffer);
           System.out.println(new String(Buffer)+","+f.read());
           f.skipBytes(LEN+4);
           Buffer = null;
           f.read(Buffer);
           System.out.println(new String(Buffer)+","+f.read());
           f.close();
        }
}

class Employee {
        public  String name = "unknown";
    public  int age = 0;
    public         static final int LEN = 8;
        public Employee(String name,int age) {

                if(name.length()<LEN)
                        name += "\u0000";
                else
                        name = name.substring(0,LEN);
                this.name = name;
                this.age = age;
        }
}
编译没问题,但执行却有问题。

QQ截图20111126144720.png (6.29 KB, 下载次数: 46)

QQ截图20111126144720.png

作者: 李振元    时间: 2011-12-16 14:56
楼主的f.close();语句已经将RandomAccessFile对象关闭掉,
所以会报Stream Closed的异常
作者: songxingchao    时间: 2011-12-16 17:35
   第一个    f.close(); 要删除掉,否则就f就没法继续访问了。
还有,Buffer = null,也要删除掉,如果不删除, Buffer就没有相对应的存储空间了, 因为被赋值为空了。
还有调用f.read(Buffer); 之后 再调用f.skipBytes(LEN+4); 也不对,  因为read函数已经把指针后移8位了,  之后再skip4位就行了, 不用skip12位。


作者: 吴亨    时间: 2011-12-17 12:57
songxingchao 发表于 2011-12-16 17:35
第一个    f.close(); 要删除掉,否则就f就没法继续访问了。
还有,Buffer = null,也要删除掉,如果不删 ...

兄弟,厉害。
作者: 吴亨    时间: 2011-12-17 12:57
谢谢大家




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2