簡體   English   中英

FileReference.save()復制ByteArray

[英]FileReference.save() duplicates ByteArray

我在使用FileReference.save()時遇到了內存問題。 我的Flash應用程序實時生成大量數據,需要將這些數據保存到本地文件中。 據我了解,Flash 10(而不是AIR)不支持流式傳輸到文件。 但是,更糟糕的是FileReference.save()在保存之前復制所有數據。 我一直在尋找解決方案,以使內存使用率翻倍,並考慮了以下方法:

如果我將ByteArray的自定義子類作為參數傳遞給FileReference.save(),該ByteArray子類將覆蓋所有read *()方法,該怎么辦。 重寫的read *()方法將等待我的應用程序生成一條數據,返回此數據,然后立即將其從內存中刪除。 我知道將生成多少數據,因此我也可以覆蓋length / bytesAvailable方法。

這有沒有可能? 你能給我一些提示怎么做嗎? 我創建了ByteArray的子​​類,為其注冊了一個別名,將該子類的一個實例傳遞給FileReference.save(),但是不知何故,FileReference.save()似乎將其視為ByteArray實例,並且沒有調用任何我覆蓋的方法...

非常感謝您的幫助!

這不是我之前嘗試過的事情,但是您可以嘗試將數據發送到php應用程序中,該應用程序可以將ByteArray保存到服務器中,就像將圖像保存到服務器中一樣,因此您可以使用URLLoader.data代替,使用類似以下內容的代碼:

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

這是一個有趣的想法。 也許一開始,您應該在擴展的ByteArray中添加跟蹤,以查看FileReference#save()在內部的功能。

如果它有某種

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

功能,覆蓋可能會像您所說的那樣,在每次讀取時截斷原始緩沖區,例如:

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

另一方面,如果現在可以正常工作,那么我猜以后原始字節數組在應用程序中將不再可用。

(我自己沒有測試過,截斷可能需要比示例更多的工作)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM