Posts Tagged ‘byte编码’

三月 17th, 2010

as3和java的byte编码

5 Comments, as、flex, by army.

as3和java互相通信,这是现在经常能看到的一种方式了。很多大型应用、富客户端和服务器通信、webgame等,基本上都选择了这一组合。
这几天我在研究as3和java的socket通信时,遇到了点问题,后来结果证明,我是杞人忧天了……
socket通信as3和java都有比较底层的api可以使用,比如传输byte流。我们可以通过对一个字符串编码进行实验:
String s = “army阿米”;
byte[] b = s.getBytes(“UTF-8″);
var s:String = “army阿米”;
var ba:ByteArray = new ByteArray();
ba.writeUTFBytes(s);
值得一提的是,as3默认编码就是UTF-8,这点无需关心;java的默认编码和操作系统平台有关,比如我的机子默认是GBK编码,如果要和as3保持一致,就得在读取时手动指定。如果不知道默认编码是什么,可以通过FileWriter.getEncodeing()方法来取得。
这两种语言在编码的结果上是一致的(废话,编码可是个标准),但是在显示方面就不一样了,这也导致我郁闷了半天为何显示结果不相同?
1100001
1110010
1101101
1111001
11101001
10011000
10111111
11100111
10110001
10110011
以上是最终存储的结果。但是问题来了,as3的ByteArray类用来存储字节,其中每个字节是无符号的;java中byte却是有符号的,它的最高为用来表示正负。因此打印的时候一个是正数(范围0到255),另外一个就变成了负数(范围-128到127)。