2012-08-07 2 views
3

var fData : ByteArray = new ByteArray();플래시 as3 byteArray의 일부를 제거하는 방법은 무엇입니까?

이 배열에서 일부 바이트를 제거해야하지만 플래시에서 공용 메서드를 찾을 수 없습니다. 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는 예측할 때로는 자신을 잘라 코드입니다. 가끔 오래된 블록이 두 번 발견되는 경우도 있지만 때로는 발견되지 않을 수도 있습니다.

답변

3

원하는 바이트 만 읽을 수 있습니다. 원하지 않는 바이트를 버리는 것과 같은 효과가 있습니다. 당신은, 당신이 fData에서 원하지 않는 바이트를 제거하는 그래서 그 대신

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

을 : 매우 간단한 예를 들어, 당신은 10 바이트 길이의이 ByteArray을 가지고 있고 당신은 처음 3 바이트를 폐기한다고 가정 새 ByteArray를 만들고 fData에서 원하는 바이트 만 가져옵니다.

명백히, 제거하려는 바이트의 시퀀스가 ​​fData의 시작 또는 끝에서부터의 시퀀스가 ​​아니라면 좀 더 복잡해 지겠지만 메소드는 동일하게 유지됩니다. 원하는 바이트를 읽습니다. 당신이하지 않는 것들을 제거하십시오.

+0

내가 궁금 단지 검사

  • 바이트 배열 쓰기 자체에 누락, 잘 작동 제거하고자하는 포인트를 null로 설정하고 배열의 나머지 부분을 이동하는 방법이 있습니다. 각 요소를 (실제로 후드에서 어떻게 구현되는지에 따라) 여전히 이동해야하지만, T를 절약하는 CPU 비용 그는 ByteArray가 얼마나 큰가에 따라 메모리가 부족합니다. RAM이 부족하면 새로운 것을 읽는 것만으로도 문제가 해결되지 않을 수도 있습니다 (단 하나 일 수도 있음). – shaunhusain

  • +0

    그 자체에 쓸 수 있습니까? 은 fData.writeBytes (fData, 2, 7)와 같습니다. ? ByteArray가 매우 큰 경우 해결책이 무엇이 될지 잘 모르겠다. @shaunhusain 좋은 점, –

    +0

    ). –

    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; 
    
      나는이 테스트
    • 을 방지하기 위해 인덱스를 확인해야하며