为了账号安全,请及时绑定邮箱和手机立即绑定

为什么会输出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));
        }

正在回答

2 回答

一开始是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)


0 回复 有任何疑惑可以回复我~

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

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信