`
hje
  • 浏览: 288061 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

byteArray 操作

阅读更多
这段时间在做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
分享到:
评论
4 楼 dbmonths 2011-08-04  
dbmonths 写道
dbmonths 写道
brightACE 写道
学习了,感谢分享

test

test2

test3
3 楼 dbmonths 2011-08-04  
dbmonths 写道
brightACE 写道
学习了,感谢分享

test

test2
2 楼 dbmonths 2011-08-04  
brightACE 写道
学习了,感谢分享

test
1 楼 brightACE 2011-04-12  
学习了,感谢分享

相关推荐

    ByteArray-Scale-Bitmap.rar_ByteArray_slice

    总之,"ByteArray-Scale-Bitmap.rar_ByteArray_slice" 提供的是一种高效且灵活的9-slice Bitmap缩放解决方案,通过ByteArray操作,降低了内存压力,提升了用户体验。理解和掌握这一技术,对于Android开发者来说,是...

    flex byteArray to sound

    这个方法可以从Sound对象中提取数据到另一个ByteArray,但我们这里是要反向操作,所以需要先将数据写入Sound对象。这通常在`SoundEvent.OPEN`事件触发后进行,因为此时Sound对象已准备好接收数据。 ```actionscript ...

    char bytearray string的区别.docx

    `bytearray` 提供了多种操作方法,如追加、插入和删除字节。在进行网络通信(如TCP)时,`bytearray` 通常用于组装和拆解消息,因为它可以方便地处理字节流。 最后,`string` 在C++中是字符串类(`std::string`),...

    Flex 与 Struts2 ByteArray 数据上传

    在Struts2框架中,Action是业务逻辑的入口点,它接收请求、执行相应的操作并返回结果。在这个特定的Action中,很可能有一个方法专门用来接收并处理ByteArray数据,例如`execute()`方法。 2. **HttpTest.mxml**:这...

    udp_transfile-通过UDP协议实现发送端和接收端之间的文件传输.zip

    在C#中,可使用FileStream类读取文件,使用MemoryStream或ByteArray操作数据流。 4. **数据包处理**:由于UDP的不可靠性,发送端可能需要将大文件分割成多个小数据包进行发送,每个数据包包含文件的一部分内容和...

    byteArray的妙用Chapter 1 - The first bits

    在实际应用中,我们常常需要使用诸如`java.io.InputStream`和`java.io.ByteArrayOutputStream`这样的类来读写byteArray,或者使用`java.nio`包中的ByteBuffer进行更高效的操作。理解并熟练运用byteArray处理二进制...

    通过ByteArray来播放MP3

    ### 通过ByteArray播放MP3的方法解析 在Adobe Flash平台中,使用`ByteArray`来加载并...需要注意的是,实际操作时还需要处理一些细节问题,如错误处理、音频播放控制等。希望本文能够帮助您更好地理解和实现这一功能。

    ByteArray.js:等效于ActionScript 3的ByteArray for Javascript,支持AMF0和AMF3

    AMF(Adobe的操作消息格式) ByteArray.js同时支持AMF0和AMF3。 它可以序列化和反序列化您的数据。 数据与ByteArray字节流共享,从而允许您通过调用ByteArray的构造函数来直接进行处理,这非常方便。 十进制值 该库...

    完整详细版Python全套教学课件 第02节 内置数据结构04 bytes和bytearray.pptx

    `bytearray`提供了与`bytes`相同的操作,但还额外支持一些列表特有的方法,如`append()`、`insert()`、`extend()`、`pop()`和`remove()`,使得它在需要修改字节序列的场合非常有用。 字符串、`bytes`和`bytearray`...

    详解python string类型 bytes类型 bytearray类型

    ### 详解Python中的String类型、Bytes类型与Bytearray类型 ...通过了解 `str`、`bytes` 和 `bytearray` 类型之间的差异和转换方法,开发者能够更加灵活地操作不同格式的数据,从而提高代码的效率和灵活性。

    rastlib-bytearray:方便使用的Lib使用字节和位

    Rust 语言以其安全、高效和并发性著称,而 `rastlib-bytearray` 库则是 Rust 社区为方便处理字节和位操作提供的一款实用工具。本文将深入探讨 `rastlib-bytearray` 的核心特性、用法以及如何在实际项目中应用它。 ...

    一个基于C# 实现的Image与Byte Array进行相互转换的Class类库源码及例子程序

    在.NET框架中,C#是一种常用的编程语言,用于开发各种应用程序,包括图形用户界面(GUI)和服务器端应用。在处理图像数据时,有时我们需要将图像对象...通过理解并运用这个类库,你可以更有效地处理和操作图像数据。

    ByteArray-开源

    标题中的"ByteArray-开源"指的是一个开放源代码的项目,其核心是围绕字节数组(ByteArray)进行操作。在编程中,字节数组是一种常见的数据结构,用于存储二进制数据,如图片、音频文件或者网络传输的数据。这个开源...

    CVE-2015-5119_walkthrough:文章CVE-2015-5119 Flash ByteArray UaF的存档

    3. **UAF条件**:如果释放后,仍有代码尝试访问或操作这个已被释放的`ByteArray`,那么就触发了UAF漏洞。 4. **恶意利用**:攻击者可以构造特定的输入序列,使得释放后的`ByteArray`对象被重新分配给不同的内存区域...

    qbytearrayqbytearray.docx

    它可以高效地存储和操作字节数据,支持一系列丰富的操作,如创建、读写、拼接、删除以及与字符串之间的转换等功能。在Qt程序开发中,`QByteArray`的应用非常广泛,比如在网络编程中传输二进制数据、文件读写操作等...

    FluorineFx中的字节数组实现图片上传

    在处理图片上传这类数据量较大的操作时,FluorineFx提供了一种高效的方式——通过字节数组(ByteArray)来传输图像数据。下面将详细讲解如何利用FluorineFx的ByteArray实现图片上传功能。 首先,理解ByteArray是...

    android开发中SD卡的文件操作.doc

    ### Android开发中SD卡的文件操作详解 #### 一、前言 在Android应用开发过程中,经常需要对设备上的文件进行读写操作。特别是在需要大量存储空间的应用场景下,使用SD卡来存储文件是一个非常实用的选择。本文将...

    完整详细版Python全套教学课件 第02节 内置数据结构05切片操作.pptx

    这些数据类型都支持可迭代操作,即可以用`for...in`循环遍历它们的元素,同时可以通过下标访问特定位置的元素,并且能够使用切片操作来获取数据子集。 切片操作是Python中的一个重要特性,它允许我们按照索引范围来...

    vb2005案例-二进制文件的读写操作

    在VB2005中,二进制文件的读写操作是编程中常见的任务,尤其在处理非文本数据,如图像、音频或自定义数据结构时。本案例将深入探讨如何利用VB2005进行二进制文件的读取与写入,以帮助开发者更好地理解和应用这些技术...

Global site tag (gtag.js) - Google Analytics