flash as3如何删除byteArray的一部分?

时间:2012-08-07 17:41:23

标签: actionscript-3 flash bytearray

var fData:ByteArray = new ByteArray();

我需要删除此数组中的一些字节,但在Flash中找不到任何公共方法来执行此操作。 我搜索了类似fData.remove(start,length)的内容,但没有成功。

这是一个代码

    function _dlProgressHandler(evt:ProgressEvent):void { //this is progressEvent for URLStream

............... ///some code

var ff:ByteArray = new ByteArray();

stream.readBytes(ff,0,stream.bytesAvailable);
fileData.writeBytes(ff,0,ff.length); //stream writes into fileData byteArray

//and here is cutter:

fileData.position=0;
fileData.writeBytes(ff,100,fileData.length);
fileData.length=fileData.length-100);

}

因此,fileData有时会无法预测。 有时老块被发现两次,有时根本找不到它们。

2 个答案:

答案 0 :(得分:3)

您始终只能读取所需的字节,这与丢弃您不想要的字节具有相同的效果。作为一个非常简单的示例,假设您有一个10字节长的ByteArray,并且您想要丢弃前3个字节:

var newBytes:ByteArray = new ByteArray();
newBytes.writeBytes(fData, 2, 7);  

因此,您只需创建一个新的ByteArray并从fData中获取所需的字节,而不是从fData中删除不需要的字节。

显然,如果要删除的字节序列不仅仅是fData开头或结尾的序列,它会稍微复杂一点,但方法保持不变:读取你想要的字节,而不是删除你没有的那些。

答案 1 :(得分:3)

AS-3有时非常好。这会从您想要的任何位置删除数组中的字节。开始,中间或结束。只需要检查索引以避免IndexOutOfBounds

var array: ByteArray = ...; // create the byte array or load one
var index: int = 4;
var count: int = 5;

array.position = index;
array.writeBytes(array, index + count, array.length - (index + count));
array.length = array.length - count;
  • 我对此进行了测试,效果很好,只是缺少检查
  • 字节数组可以写入自身