A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡威 黑马帝   /  2012-2-22 09:14  /  1981 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.        RandomAccessFile raf=new RandomAccessFile("xiaosan.txt","r");
2.                        byte[] b=new byte[4];
3.                        int i=raf.readInt();               
7.                        System.out.println(i);

运行结果是825375031 怎么得出来的?  (xiaosan.txt文件里只写了1297),请给出具体过程

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

6 个回复

倒序浏览
不懂,不过帮你顶
回复 使用道具 举报
1:首先判定下四个字符的范围,如果0 <= b1, b2, b3, b4 <= 255,则结果将等于:
       (b1 << 24) | (b2 << 16) + (b3 << 8) + b4
2:raf.readInt();                从此文件读取一个有符号的 32 位整数。
   你自己在算下,我试了结果没问题的。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
参考API:
public final int readInt()
                  throws IOException从此文件读取一个有符号的 32 位整数。此方法从该文件的当前文件指针开始读取 4 个字节。如果按顺序读取的字节为 b1、b2、b3 和 b4,其中 0 <= b1, b2, b3, b4 <= 255,则结果将等于:
(b1 << 24) | (b2 << 16) + (b3 << 8) + b4
在读取了这四个字节、检测到流的末尾或者抛出异常前,此方法一直阻塞。

返回:
此文件的下四个字节,解释为一个 int。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
这“|”是什么意思,为什么要对b1,b2,b3,b4做这样的运算?
回复 使用道具 举报
1.
"|",这边表示为:位运算符-“或”
2.
举例:
b1:00000000 00000000 00000000 00000001 (1)
b2:00000000 00000000 00000000 00000010 (2)
b3:00000000 00000000 00000000 00000011 (3)
b4:00000000 00000000 00000000 00000100 (4)
3.
接着我们根据它的计算公式验证确认结果:
(b1 << 24) | (b2 << 16) + (b3 << 8) + b4
(b1 << 24) :b1左右24位为:00000001 00000000 00000000 00000000
(b2 << 16):同理为:00000000 00000010 00000000 00000000
(b3 << 8):同理为:00000000 00000000 00000011 00000000
4.
计算(b1 << 24) | (b2 << 16) :(或,有一个为“1”,结果就是“1”)
00000001 00000000 00000000 00000000
00000000 00000010 00000000 00000000
结果:
00000001 00000010 00000000 00000000
计算 (b3 << 8) + b4:
00000000 00000000 00000011 00000000(768)
00000000 00000000 00000000 00000100(4)
00000000 00000000 00000011 00000100(772)
5.最后的结果:
00000001 00000010 00000000 00000000
00000000 00000000 00000011 00000100
则最后结果该为:
   00000001 00000010 00000011 00000100
          1              2             3              4
其实就是:将四个读取出的字节从高到低对应的存储进int型(占四个字节)数据中
回复 使用道具 举报
胡威 黑马帝 2012-2-23 14:21:15
7#
3Q,都快把或运算符忘了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马