我在使用FileReference.save()时遇到了内存问题。我的Flash应用程序实时生成大量数据,需要将这些数据保存到本地文件中。据我所知,Flash 10 (相对于AIR)不支持流式传输到文件。但是,更糟糕的是,FileReference.save()在保存数据之前会复制所有数据。我正在寻找一种解决方法来解决这个内存使用量加倍的问题,并考虑了以下方法:
如果我将ByteArray的一个自定义子类作为参数传递给FileReference.save(),其中这个ByteArray子类将覆盖所有的read*()方法,会发生什么呢?被覆盖的read*()方法将等待应用程序生成一段数据,返回这段数据并立即将其从内存中删除。我知道将生成多少数据,因此我还可以覆盖length/bytesAvailable方法。
有可能吗?你能给我一些提示怎么做吗?我已经创建了ByteArray的一个子类,为它注册了一个别名,并将这个子类的一个实例传递给了FileReference.save(),但不知何故,FileReference.save()似乎就像对待一个ByteArray实例一样对待它,并且没有调用我的任何被覆盖的方法……
非常感谢您的帮助!
发布于 2009-05-15 18:24:27
这是我以前没有尝试过的东西,但是你能不能试着把数据发送到一个php应用程序,这个应用程序可以把ByteArray保存到服务器上,就像把图像保存到服务器上一样,所以你可以用URLLoader.data代替,使用类似这样的东西:
http://www.zedia.net/2008/sending-bytearray-and-variables-to-server-side-script-at-the-same-time/
发布于 2009-05-16 14:11:01
这是一个有趣的想法。也许首先,您应该在扩展的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;
}另一方面,如果现在可以工作,我猜原来的字节数组以后在应用程序中就不再可用了。
(我自己还没有测试过,截断可能需要比示例更多的工作)
https://stackoverflow.com/questions/869816
复制相似问题