这段时间在做socket, 当然就用到ByteArray了,O(∩_∩)O~, 写下ByteArray各方法含义.
objectEncoding: 设置ByteArray读写Object是编码格式, 仅对writeObject,readObject这两个方法有用.
endian:指示多字节数字的最高有效字节位于字节序列的最前面。 一般不用设置, 默认是Endian.BIG_ENDIAN.
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也是如此
数值存取:
readBoolean, writeBoolean ,readByte,writeByte等..以下简称 Boolean,Byte等...
占用字节数1: Boolean,Byte,UnsignedByte (因为是以byte为单位存取,所要Boolean也占用一个字节)
占用字节数2: Short,UnsignedShort
占用字节数4: Int,Float,UnsignedInt
占用字节数8: Double
Unsigned 表示无符号类型,仅表示正数, 否则为有符号,可表示正负数.
二进制存取:
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) s = s.substr(0, s.length - 1);
trace("bytes:", s);
}
readUTFBytes(length:uint):String
writeUTFBytes(value:String):void
跟readUTF,writeUTF不同,不用两个字节的head,直接存取字符串字节流, Java默认也用这种格式.
出处:http://www.lite3.cn/blog/?p=534
分享到:
相关推荐
AMF(Adobe的操作消息格式) ByteArray.js同时支持AMF0和AMF3。 它可以序列化和反序列化您的数据。 数据与ByteArray字节流共享,从而允许您通过调用ByteArray的构造函数来直接进行处理,这非常方便。 十进制值 该库...
我们也会向你介绍 Python 中另外两种表⽰裸字节数据的对象:bytes 和 bytearray。 【字符串操作】 下边,我们将着重介绍⽤于字符串操作的运算符、类⽅法和函数。 1,字符串运算符 在《Python 运算符和表达式》⼀⽂...
第02节 内置数据结构04bytes和bytearray 第02节 内置数据结构05切片操作 第02节 内置数据结构06作业 第03节 00 IPython的使用 第03节 01 封装和解构 第03节 02 元组set及操作 第03节 03 字典及操作 第03节 04 解析式...
内置数据结构04bytes和bytearray 内置数据结构05切片操作 内置数据结构06作业 内置数据结构作业参考 00IPython的使用 01封装和解构 02set及操作 03字典及操作 04解析式生成器 05内建函数迭代器 课堂练习 选择排序 ...
java远程访问linux服务器操作 远程执行shll脚本或者命令、上传下载文件 package com.szkingdom.kfit.bank.ccbDirectShortcut.helper; import ch.ethz.ssh2.Connection; import ch.ethz.ssh2.SCPClient; import ...
因此如果要创建一个与已经存在的对象内容相同的对象,不能通过简单的赋值操作。这样说的可能还是不太明白。 看下面的例子: 代码如下: var a=[1,2,3,4]; var b=a;c=b; a.pop(); //移除最后一个元素 alert(b)...
PigLatin表达式操作的是relation,FILTER、FOREACH、...用户常用as语句来自定义schema,或是load函数导入schema,比如:若不指定field的类型,则其默认为bytearray。对未知schema进行操作时,有:若join/cogroup/cross
基于bytearray 的python二进制缓存的封装,能够根据位置获取指定类型的值,方便PYTHO编程中对二进制数据的操作
FileUtil 是库项目,用于在内部和外部存储中或从内部和外部存储中读取和写入文件(byteArray)。 如何在代码中使用此库 - 用于在内部存储中/从内部存储中读取和写入文件中的字符串 try { FileUtil....
Step01:进行扫码操作 // 扫码方法一,适用于经过裁剪情况下扫码 external fun scanImage ( data : ByteArray , width : Int , height : Int , cropX : Int , cropY : Int , cropWidth : Int , cropHeight ...
二进制序列类型bytes, bytearray ;集合类型set, ;映射类型dict ;程序结构:顺序、选择、循环 ;字符串操作函数 ;数学函数 ;关于复数的数学函数 ;十进制定点和浮点运算 ;分数 ;伪随机数 ;数学统计函数等等 阅读建议:...
在Python操作数据内容时,多数情况下可能遇到下面3种类型的数据处理: hexstring 如:’1C532145697A8B6F’ str 如:’\x1C\x53\x21\x45\x69\x7A\x8B\x6F’ list 如:[0x1C, 0x53, 0x21, 0x45, 0x69, 0x7A, 0x8B, 0x...
在Python操作数据内容时,多数情况下可能遇到下面3种类型的数据处理: hexstring 如:’1C532145697A8B6F’ str 如:’\x1C\x53\x21\x45\x69\x7A\x8B\x6F’ list 如:[0x1C, 0x53, 0x21, 0x45, 0x69, 0x7A, 0x8B, 0x...
这应该比使用双端队列、列表或手动操作str / bytearray / bytes快得多。 API 只接受bytes和bytearray ,并将数据作为bytes读回。 它是一个非阻塞流。 表现 初步性能分析表明,在向 FIFO 读取和写入大块数据时,...
Activiti 源码分析,流程文件部署主要涉及到 3 个表,分别是:ACT_GE_BYTEARRAY、ACT_RE_DEPLOYMENT、 ACT_RE_PROCDEF。主要完成“部署包”-->“流程定义文件”-->“所有包内文件”的解析部署关系 流程定义的部署...
bytearray 其实把以上类型都说成是数组是不准确的。这里把数组当作一个广义的概念,即把列表、序列、数组都当作array-like数据类型来理解。 注意本文所有代码都是在Python3.7中跑的^_^ 0x00 可变的动态列表list ...
真正的异步编码:大多数其他异步 PNG 编码器异步执行从位图数据到 PNG 数据的转换,然后在最后调用 ByteArray.compress() —— 这是一个很长的同步操作,可能需要总编码时间的一半或更多。 (一个例外是很酷的,但...
1.2 存储机制和操作方式 数据类型之所以能限定字段的数据存储长度,是因为在创建表时在内存中严格划定了地址空间,地址空间的长度是多少就能存储多少字节的数据。当然,这是一个很粗犷的概念,更具体的存储方式见...