2009-05-15 4 views
0

FileReference.save()를 사용하여 메모리 문제가 발생했습니다. 내 Flash 응용 프로그램은 실시간으로 많은 양의 데이터를 생성하므로이 데이터를 로컬 파일에 저장해야합니다. 내가 알고 있듯이 Flash 10 (AIR과 반대)은 파일 스트리밍을 지원하지 않습니다. 그러나 더 나쁜 것은 FileReference.save()가 모든 데이터를 저장하기 전에 복제한다는 것입니다.FileReference.save() 중복 ByteArray

ByteArray의 사용자 지정 하위 클래스를 FileReference.save() 인수로 전달하면이 ByteArray 하위 클래스가 모든 읽기 *를 무시할 경우 어떻게됩니까?() 메소드를 호출합니다. 재정의 된 read *() 메서드는 응용 프로그램에서 데이터를 생성 할 때까지 기다렸다가이 데이터를 반환하고 메모리에서 즉시 제거합니다. 얼마나 많은 데이터가 생성 될지 알기 때문에 length/bytesAvailable 메서드를 재정의 할 수도 있습니다.

가능합니까? 어떻게해야하는지 몇 가지 힌트를 주시겠습니까? ByteArray의 하위 클래스를 만들고 별칭을 등록하고이 하위 클래스의 인스턴스를 FileReference.save()에 전달했지만, FileReference.save()는 ByteArray 인스턴스와 마찬가지로 처리합니다. 내 재정의 된 메서드 중 하나를 호출하십시오 ...

어떤 도움을 많이 주셔서 감사합니다!

답변

0

전에 시도한 내용이 아니지만, 서버에 이미지를 저장하는 것과 마찬가지로 ByteArray를 서버에 저장하는 PHP 응용 프로그램으로 데이터를 전송 해 볼 수 있습니까? URLLoader.data 대신,이 같은 것을 사용 :

http://www.zedia.net/2008/sending-bytearray-and-variables-to-server-side-script-at-the-same-time/

+0

불행하게도,이 내 문제가 해결되지 않으면 (내가 예보다 더 많은 작업이 필요할 수 있습니다 절단이 나 자신을 테스트 havn't는). URLLoader를 사용하여 데이터를 다운로드하는 경우 URLLoader.data를 FileReference.save()로 전달해야합니다. 그러면 URLLoader.data가 다시 복제됩니다. 그래서, 이것은 데이터가 두 번 메모리에 저장되는 결과를 낳을 것입니다 ... – bartekb

+0

오, 미안합니다, 웬일인지 당신이 서버에 저장하려한다고 생각했습니다. JIRA에 두 번 저장되는 데이터에 관한 버그를 기록하고 싶습니다. 그렇지 않으면 ... 나는 FileReference.save가 로컬 디스크에 쓰는 유일한 방법이라고 생각한다. – quoo

0

그것은 흥미로운 생각이다. 아마도 FileReference # save()가 내부적으로 어떻게 작동하는지 보려면 확장 된 ByteArray에 흔적을 추가해야합니다.

while(originalByteArray.bytesAvailable) 
    writeToSaveBuffer(originalByteArray.readByte()); 

기능의 어떤 종류가있는 경우 모든 읽기에 대한 오버라이드 (override)는 원래의 버퍼를자를 수있는 당신 말처럼, 뭔가 같은 : 한편

override function readByte() : uint { 
    var b : uint = super.readByte(); 
    // Truncate the bytes (assuming bytesAvailable = length - removedBytes) 
    length = length - bytesAvailable; 
    return b; 
} 

,이 경우 이제 원래의 바이트 배열을 응용 프로그램에서 더 이상 사용할 수 없다고 생각합니다.

+0

관심을 가져 주셔서 감사합니다. 나는 이것을 시도했지만, 확장 된 ByteArray의 메소드 중 아무 것도 호출되지 않는다 ... FileReference # save()가 ByteArray # readObject/writeObject를 사용하여 인수로 주어진 ByteArray를 복제 한 다음 복제 된 객체에서 작동하는 것으로 의심된다. 그러나 이상한 이유로 인해, 확장 된 ByteArray는 그러한 복제 후에 정상적인 ByteArray가됩니다! 방금이 문제를 게시했습니다 (FileReference # save를 추적 할 수 없게 됨). 별도의 문제가 있습니다. http://stackoverflow.com/questions/875163/trouble-cloning-an-extended-bytearray – bartekb