3

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 有时会出人意料地自我切割。有时旧块会被找到两次,有时它们根本找不到。

4

2 回答 2

3

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

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

因此,与其从 fData 中删除您不想要的字节,您只需创建一个新的 ByteArray 并仅从 fData 中获取您想要的字节。

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

于 2012-08-07T17:57:11.543 回答
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;
  • 我对此进行了测试,效果很好,只是缺少检查
  • 字节数组可以写入自身
于 2013-08-07T22:41:20.650 回答