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

来源:3-1 RandomAccessFile基本操作

sprnate

2015-03-11 09:38

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://img.mukewang.com/54ffa58d0001f23807610093.jpg

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



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


写回答 关注

3回答

  • 源代码_思无邪
    2015-06-02 08:54:23

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

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

  • 风中过客
    2015-05-07 16:37:52

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

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

  • 好帮手慕珊
    2015-03-12 08:56:33

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

    sprnat...

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

    2015-03-13 17:03:20

    共 1 条回复 >

文件传输基础——Java IO流

为您介绍IO流的使用,以及对象的序列化和反序列化的内容

133754 学习 · 1030 问题

查看课程

相似问题