2012-08-07 62 views
3

var fData:ByteArray = new ByteArray();flash as3如何删除部分byteArray?

我需要删除此数组中的一些字节,但无法在Flash中找到任何公共方法来执行此操作。 我搜索了一些像fData.remove(开始,长度)但没有成功。

这里是一个代码

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削减本身不可预测的时候。 有时老块被发现两次,有时他们根本找不到。

回答

3

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

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

因此,而不是删除您不从FDATA想要的字节,你只创建一个新的ByteArray并且只从fData获得你想要的字节。

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

+0

不知有一种方法可以将他想要删除的点设置为null并且移动数组的其余部分,我想可能还是需要移动每一个元素(取决于实际如何在引擎盖下实现),但可能值得节省t的CPU成本他的内存取决于ByteArray的大小,如果耗尽内存是一个问题,只是读一个新的问题似乎不是一个很好的解决方案(尽管可能是唯一的解决方案)。 – shaunhusain 2012-08-07 17:59:08

+0

我可以自己写吗? 像fData.writeBytes(fData,2,7); ? 我认为,没有=) – 2012-08-07 19:02:54

+0

@shaunhusain好点,不知道如果ByteArray是非常大的解决方案将是什么。 – 2012-08-07 20:05:01

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; 
  • 我测试了这一点,它工作得很好,只是检查缺少
  • 字节数组可以写自己