问答详情
源自:3-1 RandomAccessFile基本操作

为什么会输出8跟12,这个不太理解为什么是8、12,求告知

public static void main(String[] args) throws IOException{
        File demo = new File("demo");
        if(!demo.exists())
            demo.mkdir();
        
        File file = new File(demo,"raf.dat");
        if(!file.exists())
            file.createNewFile();
        RandomAccessFile raf = new RandomAccessFile(file,"rw");
        
        //指针位置
        System.out.println(raf.getFilePointer());
        
        raf.write('A');//只写了一个字节,写进A的后8位
        System.out.println(raf.getFilePointer());
        raf.write('B');
        System.out.println(raf.getFilePointer());
        
        int i = 0x7ffffff;
        //用write方法每次只能写一个字节,如果要把i写进去就得写4次
        raf.write(i >>> 24);//写进i的高八位
        raf.write(i >>> 16);
        raf.write(i >>> 8);
        raf.write(i);
        System.out.println(raf.getFilePointer());
        
        //可以直接写进一个int
        //raf.writeInt(i);writeInt底层做的还是上面write所示代码的事情
        
        String s = "中";
        byte[] gbk = s.getBytes("gbk");
        raf.write(gbk);
        System.out.println(raf.getFilePointer());
        System.out.println(raf.length());
        
        //读文件,必须把指针移到头部
        raf.seek(0);
        
        //一次性读取,把文件中的内容都读到字节数组中
        byte[] buf = new byte[(int)raf.length()];
        raf.read(buf);
        System.out.println(Arrays.toString(buf));
        
        //16进制方式输出
        for (byte b : buf) {
            System.out.print(Integer.toHexString(b));
        }

提问者:Cecilia_chen 2016-03-15 16:08

个回答

  • 愤怒的香柚
    2016-09-25 21:30:10

    一开始是0,A、B之后是2,

    到这里写进  i

            raf.write(i >>> 24);//写进i的高八位
            raf.write(i >>> 16);
            raf.write(i >>> 8);
            raf.write(i);
            System.out.println(raf.getFilePointer());

    输出 6  (2+4)

         //可以直接写进一个int
            //raf.writeInt(i);writeInt底层做的还是上面write所示代码的事情

    又写一次  i

    输出  10 (6+4)

        String s = "中";
            byte[] gbk = s.getBytes("gbk");
            raf.write(gbk);
            System.out.println(raf.getFilePointer());
            System.out.println(raf.length());

    一个汉字占两个字节,此时字节长度是  12  (10+2)


  • 高恒博
    2016-03-15 18:26:00

    你文件里面之前有你内容,你删除文件重新运行一遍就可以了。