【问题标题】:How to get a bytearray from file stream in Adobe AIR?如何从 Adob​​e AIR 中的文件流中获取字节数组?
【发布时间】:2010-05-27 13:54:15
【问题描述】:

我阅读有限(小 - 15 - 500 mb 文件)。 我需要能够将所有文件字节放入一个字节数组中。 所以我有一个功能:

        [Bindable]
        public var ba:ByteArray = new ByteArray;
        //.... code ....//
        protected function fileOpenSelected(event:Event):void
        {
            currentFile = event.target as File;
            stream = new FileStream();
            stream.openAsync(currentFile, FileMode.READ);
            stream.readBytes(ba);
            stream.close();

                            MyFunction(ba);
        }

但它不起作用=( - 给我错误:错误 #2030:遇到文件结尾。

如何从流中获取完整的字节数组以将其用作普通字节数组?

【问题讨论】:

    标签: flash file actionscript air bytearray


    【解决方案1】:

    在浏览了一段时间的文档后,我终于明白了这一点。呼!

    在我的例子中,我不得不将 wav 文件作为我正在使用的类的 bytesArray 读取,因此我可以在公共范围内按需使用它。

    var file:File = File.applicationDirectory.resolvePath("blip.wav");
    var fileStream:FileStream = new FileStream(); 
    fileStream.open(file, FileMode.READ);
    var bytes:ByteArray = new ByteArray
    fileStream.readBytes(bytes);
    fileStream.close();
    

    希望这对您有帮助,就像对我有帮助一样。我已经对其进行了测试并确认它有效。

    【讨论】:

    • 不应该是new ByteArray()
    • 自 2014 年 11 月以来我一直远离 AS3,但我知道这按预期运行。另外,我知道您在 C++ 中的空构造函数调用中省略了括号,但我不记得该规则是否适用于 AS3。
    【解决方案2】:

    FileStream 的重点不是你没有正常的ByteArray,而是异步读取吗?它实现了IDataInput,只要bytesAvailable大于0就可以读取。

    在每个进度事件上,您只需将readBytes 转换为输出ByteArray,一旦获得完整的事件,您就可以使用它。

    问候
    back2dos

    【讨论】:

    • 但我想要我的 bytaarray( - 我的班级使用它!)
    • 好吧,要么你使用我描述的方法,要么你尝试File::load()然后访问File::data
    • 投反对票是因为,您要么是在描述等待 event.complete 并将数据传递给事件处理程序的旧方法,要么是措辞相当混乱。从 FileStream 中获取 ByteArray 应该很容易(我们中的一些人确实需要。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多