最近研究一下AS3网络编程,研究下AS3的SOCKET和JAVA、C++的区别。
objectEncoding: 设置ByteArray读写Object是编码格式, 仅对writeObject,readObject这两个方法有用. endian:指示多字节数字的最高有效字节位于字节序列的最前面。 一般不用设置, 默认是Endian.BIG_ENDIAN.在JAVA中也是默认大端序,而VC++是小端序。所谓大小端序可以参考JAVA大小端这篇文章。
bytesAvailable, length, position 这3个属性是相关的. position:ByteArray的当前读写点, 可读写. (当然length == 1, 设置position = 5, 这样也不会报错) bytesAvailable:ByteArray当前可读取的字节数,只读. length:ByteArray 的总字节数, 可读写. (如果设置的值比实际的小,则截短ByteArray,但不释放, 否则在右侧用0填充) 如果position不越界,那么bytesAvailable == length - position;
clear():void:释放ByteArray的资源,并设置length=0,(position不变). length 也可以显示的设置为0, 但 length=0 不释放ByteArray的资源.
read,write方法:
二进制存取: byteArray.readBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void 从byteArray的byteArray.position开始,读取length个字节放到bytes里,bytes从offset开始放.(bytes的position不变,bytesArray的position增加) byteArray.writeBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void 从bytes的offset开始,读取length个字节放到byteArray里,byteArray从byteArray.position开始放. (bytes的position不变, byteArray的position增加) 总结: byteArray都是从byteArray.position开始(不论读写), bytes都是从offset开始(不论读写).
对象存取: readObject,writeObject 用于直接存取 AS对象.应用AMF格式 反序列化从字节数组(序列化到字节数组).
字符串存取: readMultiByte(length:uint, charSet:String):String writeMultiByte(value:String, charSet:String):void 根据不同的编码存取字符串. readUTF():String writeUTF(value:String):void 这个格式分两部分: head + body head:一个16为的整数表示之后字符串的字节数. body:字符串的字节流. (这里的汉字用3个字节表示).
objectEncoding: 设置ByteArray读写Object是编码格式, 仅对writeObject,readObject这两个方法有用. endian:指示多字节数字的最高有效字节位于字节序列的最前面。 一般不用设置, 默认是Endian.BIG_ENDIAN.在JAVA中也是默认大端序,而VC++是小端序。所谓大小端序可以参考JAVA大小端这篇文章。
bytesAvailable, length, position 这3个属性是相关的. position:ByteArray的当前读写点, 可读写. (当然length == 1, 设置position = 5, 这样也不会报错) bytesAvailable:ByteArray当前可读取的字节数,只读. length:ByteArray 的总字节数, 可读写. (如果设置的值比实际的小,则截短ByteArray,但不释放, 否则在右侧用0填充) 如果position不越界,那么bytesAvailable == length - position;
clear():void:释放ByteArray的资源,并设置length=0,(position不变). length 也可以显示的设置为0, 但 length=0 不释放ByteArray的资源.
var bytes:ByteArray = new ByteArray(); bytes.writeInt(10); // length = 4 bytes.length = 0; // 仅截短bytes,并不释放资源 bytes.length = 4; // 重新设置bytes为4个字节 bytes.position = 0; trace(bytes.readInt());// 10 bytes.clear(); // 释放资源,并设置length = 0 bytes.position = 0; bytes.length = 4; // 重新设置bytes为4个字节 trace(bytes.readInt());// 0
read,write方法:
- read方法时有时会有报Error: Error #2030: 遇到文件尾。错误. 因为所要读取的字节数不足, 比如bytesAvailable<4,却要读4个字节(例如:readInt).
- read,write 方法都是按字节存取的,即便是readBoolean,writeBoolean也是如此。
二进制存取: byteArray.readBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void 从byteArray的byteArray.position开始,读取length个字节放到bytes里,bytes从offset开始放.(bytes的position不变,bytesArray的position增加) byteArray.writeBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void 从bytes的offset开始,读取length个字节放到byteArray里,byteArray从byteArray.position开始放. (bytes的position不变, byteArray的position增加) 总结: byteArray都是从byteArray.position开始(不论读写), bytes都是从offset开始(不论读写).
对象存取: readObject,writeObject 用于直接存取 AS对象.应用AMF格式 反序列化从字节数组(序列化到字节数组).
字符串存取: readMultiByte(length:uint, charSet:String):String writeMultiByte(value:String, charSet:String):void 根据不同的编码存取字符串. readUTF():String writeUTF(value:String):void 这个格式分两部分: head + body head:一个16为的整数表示之后字符串的字节数. body:字符串的字节流. (这里的汉字用3个字节表示).
var bytes:ByteArray = new ByteArray();
bytes.writeUTF("123");
showBytes(bytes); // bytes: 0x0 0x3 0x31 0x32 0x33 (0x0,0x3 两个字节的头,表示后面有3个字节的字节流, 0x31:1, 0x32:2, 0x33:3)
bytes.length = 0;
bytes.position = 0;
bytes.writeUTF("我是lite3");
trace(bytes.length); // 13 头(2个字节) + 2个汉字(6个字节) + 5个字母数字(5个字节)
function showBytes(bytes:ByteArray):void
{
var s:String = "";
bytes.position = 0;
while (bytes.bytesAvailable)
{
s += "0x" + bytes.readByte().toString(16) + " ";
}
if (s.length > 0) ss = s.substr(0, s.length - 1);
trace("bytes:", s);
}
readUTFBytes(length:uint):String writeUTFBytes(value:String):void 跟readUTF,writeUTF不同,不用两个字节的head,直接存取字符串字节流, Java默认也用这种格式. 收藏的用户(0) X
正在加载信息~
推荐阅读
最新回复 (0)
站点信息
- 文章2313
- 用户1336
- 访客11756754
每日一句
Life is short; Live it!
人生苦短,活出精彩。
人生苦短,活出精彩。
信鸽推送报错NSObject checkTargetOtherLinkFlagForObjc
简单利用Clover四叶草安装U盘安装黑苹果
学习使用Java注解
OllyDbg中如何找出B模块中所有调用了A模块的C方法的地方
解决SSH客户端中文乱码
10年后,Android应用程序仍然比iOS应用程序差
C++11特性里面的thread
XPosed微信自动生成二维码
解决android studio "found an invalid color"的问题
T9社区注册方法【勼适様鲃女尔懟死】
Thinkpad x1 Extreme黑苹果10.14.5安装完成
基于大白主题增加图片本地化的功能
Linux系统查看CPU使用率的几个命令
新会员