[英]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.