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

为什么把0xfffffff写进去后,读出来是乱码?

import java.io.*;

public class Test {
	public static void main(String[] args)throws Exception{
		File file = new File("test/test.txt");
		RandomAccessFile raf = new RandomAccessFile(file, "rw");
		
		//写入文件
		int i = 0x7fffffff;
		raf.write(i >>> 24);
		raf.write(i >>> 16);
		raf.write(i >>> 8);
		raf.write(i);
		
		//从文件读取
		raf.seek(0);
		byte[] b = new byte[4];
		raf.read(b);
		String s = new String(b,"utf-16be");//utf-16be换成项目默认的编码,读出来也是乱码
		System.out.println(s);
		
		raf.close();
	}
}

运行结果:

http://img1.sycdn.imooc.com//54ffa58d0001f23807610093.jpg

期待的效果是读出“2147483647”这个数字,即0x7fffffff的十进制表示。那么代码该怎么修改呢??



还有一个问题:无符号右移运算符>>>换成右移运算符>>应该也可以吧?


正在回答

3 回答

使用:System.out.println(raf.readInt());

就可以读出你想要的数了。

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

 System.out.println(Arrays.toString(b));

输出为:[127, -1, -1, -1]

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

应该读不出数字,因为你写进去的时候也不是这些数字。你可以把移位后的值输出来看看。

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

sprnate 提问者

什么叫做“把移位后的值输出来看看”? 把i(即0x7fffffff)分四次写入,最终就是完整地把这个整型值写入文件啊。后来发现用RandomAccessFile的readInt()方法其实是可以读出该数字来的。但我想问的是为什么直接打开写入的.txt文档会是空白(在Eclipse打开是乱码)?
2015-03-13 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么把0xfffffff写进去后,读出来是乱码?

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