何明辉 发表于 2012-9-10 23:23
不好意思我没有说清楚哦,对于字符流读取中文汉字时,一般默认为一次读取两个字节来对应一个汉字字符,那么 ...
你的pm是一个字符,字符是两个字节,两个字节就是16位啊,怎么可以将一个字符&上255来得到最低8位(可是有16位的啊)呢,只能用一个字节的数值来&上255得到最低的8位(其实一个字节也就只有8位),这样才能保证每次读取的一个字节不出错.你应该要知道Reader类每调用一次read()方法读取的是一个字符,一个字符你还&上255干什么,直接用char变量来装就是了呗.一个字符&上255,那结果肯定就乱了啊.
fm1不等于pm,那是因为fm1是一个字节,pm是一个字符&上255后得到最低的8位,虽然经过&位操作后,最低8位的二进制没有变化,最高8位全部变成0了,所以一个字符&上255后,最终的二进制结果就只剩下最低8位了,也就是说,一个字符&上255后,最后的结果就被拆成只剩一个字节了(两个字节被拆成只剩一个字节).而一个中文字符被拆成只剩一个字节,这个被拆后所获得的字节,与之前的中文字符一点关系也没有了.
总结:&255操作是用在字节上的,用来保证最终的字节的正确性.但是用在字符上,就不行了,就相当于一个16位的二进制数&上00000000-11111111,那么结果只能得到字符的最低8位,最高8位将被舍弃,因为二进制中任何数&上0,结果都为0.换言之,两个字节组成的字符&上255,最终只剩下一个字节,这样的结果就和&操作之前的字符的值没有任何关系了. |