首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileReference.save()与ByteArray重复

FileReference.save()与ByteArray重复
EN

Stack Overflow用户
提问于 2009-05-15 17:03:14
回答 2查看 3.5K关注 0票数 0

我在使用FileReference.save()时遇到了内存问题。我的Flash应用程序实时生成大量数据,需要将这些数据保存到本地文件中。据我所知,Flash 10 (相对于AIR)不支持流式传输到文件。但是,更糟糕的是,FileReference.save()在保存数据之前会复制所有数据。我正在寻找一种解决方法来解决这个内存使用量加倍的问题,并考虑了以下方法:

如果我将ByteArray的一个自定义子类作为参数传递给FileReference.save(),其中这个ByteArray子类将覆盖所有的read*()方法,会发生什么呢?被覆盖的read*()方法将等待应用程序生成一段数据,返回这段数据并立即将其从内存中删除。我知道将生成多少数据,因此我还可以覆盖length/bytesAvailable方法。

有可能吗?你能给我一些提示怎么做吗?我已经创建了ByteArray的一个子类,为它注册了一个别名,并将这个子类的一个实例传递给了FileReference.save(),但不知何故,FileReference.save()似乎就像对待一个ByteArray实例一样对待它,并且没有调用我的任何被覆盖的方法……

非常感谢您的帮助!

EN

回答 2

Stack Overflow用户

发布于 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/

票数 0
EN

Stack Overflow用户

发布于 2009-05-16 14:11:01

这是一个有趣的想法。也许首先,您应该在扩展的ByteArray中添加跟踪,看看FileReference#save()在内部是如何工作的。

如果它有某种

代码语言:javascript
复制
while( originalByteArray.bytesAvailable ) 
  writeToSaveBuffer( originalByteArray.readByte() );

功能重写可以在每次读取时截断原始缓冲区,就像你说的,类似于:

代码语言:javascript
复制
override function readByte() : uint {
  var b : uint = super.readByte();
  // Truncate the bytes (assuming bytesAvailable = length - removedBytes)
  length = length - bytesAvailable;
  return b;
}

另一方面,如果现在可以工作,我猜原来的字节数组以后在应用程序中就不再可用了。

(我自己还没有测试过,截断可能需要比示例更多的工作)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/869816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档