2012-08-07 36 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; 
  • 我測試了這一點,它工作得很好,只是檢查缺少
  • 字節數組可以寫自己