gpt4 book ai didi

apache-flex - AS3 处理任意大文件

转载 作者:行者123 更新时间:2023-12-02 21:52:10 27 4
gpt4 key购买 nike

我正在尝试读取 AS3 中的一个非常大的文件,但我遇到了运行时崩溃的问题。我目前正在使用 FileStream异步打开文件。对于大于 300MB 的文件,这不起作用(无异常崩溃)。

_fileStream = new FileStream();
_fileStream.addEventListener(IOErrorEvent.IO_ERROR, loadError);
_fileStream.addEventListener(Event.COMPLETE, loadComplete);
_fileStream.openAsync(myFile, FileMode.READ);

查看 documentation ,听起来 FileStream 类仍然尝试将整个文件读入内存(这对于大文件来说是不好的)。

有没有更适合用来读取大文件的类?我真的想要像缓冲 FileStream 类这样的东西,它只从接下来要读取的文件中加载字节。

我预计我可能需要编写一个类来为我执行此操作,但随后我需要一次仅读取文件的一部分。我假设我可以通过设置 FileStream 的position和readAhead属性来一次从文件中读取一个 block 来完成此操作。如果已经存在这样的类,我很乐意节省一些时间。

有没有一种好方法可以在 AS3 中处理大文件,而不将整个内容加载到内存中?

最佳答案

您可以使用 fileStream.readAhead 和 fileStream.position 属性来设置要读取的文件数据量,以及要从文件中的何处读取数据。

假设您只想读取 GB 文件中的 MB 152。做这个;(一个千兆字节的文件由 1073741824 字节组成)(兆字节152从158334976字节开始)

var _fileStream = new FileStream();
_fileStream.addEventListener(Event.COMPLETE, loadComplete);
_fileStream.addEventListener(ProgressEvent.PROGRESS, onBytesRead);
_fileStream.readAead = (1024 * 1024); // Read only 1 megabyte
_fileStream.openAsync(myFile, FileMode.READ);
_fileStream.position = 158334976; // Read at this position in file

var megabyte152:ByteArray = new ByteArray();

function onBytesRead(e:ProgressEvent)
{
e.currentTarget.readBytes(megabyte152);
if (megabyte152.length == (1024 * 1024))
{
chunkReady();
}
}

function chunkReady()
{
// 1 megabyte has been read successfully \\
// No more data from the hard drive file will be read unless _fileStream.position changes \\
}

关于apache-flex - AS3 处理任意大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2321951/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com