為什么把0xfffffff寫(xiě)進(jìn)去后,讀出來(lái)是亂碼?
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"); //寫(xiě)入文件 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換成項(xiàng)目默認(rèn)的編碼,讀出來(lái)也是亂碼 System.out.println(s); raf.close(); } }
運(yùn)行結(jié)果:
期待的效果是讀出“2147483647”這個(gè)數(shù)字,即0x7fffffff的十進(jìn)制表示。那么代碼該怎么修改呢??
還有一個(gè)問(wèn)題:無(wú)符號(hào)右移運(yùn)算符>>>換成右移運(yùn)算符>>應(yīng)該也可以吧?
2015-06-02
使用:System.out.println(raf.readInt());
就可以讀出你想要的數(shù)了。
2015-05-07
?System.out.println(Arrays.toString(b));
輸出為:[127, -1, -1, -1]
2015-03-12
應(yīng)該讀不出數(shù)字,因?yàn)槟銓?xiě)進(jìn)去的時(shí)候也不是這些數(shù)字。你可以把移位后的值輸出來(lái)看看。