繁体   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