Как получить байтовый массив из файлового потока в Adobe AIR? - PullRequest
2 голосов
/ 27 мая 2010

Я читаю ограниченно (небольшие - 15 - 500 МБ файлов). Мне нужно иметь возможность поместить все байты файла в один байтовый массив. Итак, у меня есть функция:

        [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: обнаружен конец файла.

Как получить полный байтовый массив из потока, чтобы использовать его как обычный байтовый массив?

Ответы [ 2 ]

5 голосов
/ 10 ноября 2012

Я наконец понял это после долгого просмотра документации. Уф!

В моем случае мне приходилось читать 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();

Надеюсь, это поможет вам так же, как и мне. Я проверил это и подтвердил, что это работает.

1 голос
/ 27 мая 2010

не означает ли FileStream, что у вас нет нормального ByteArray, но вы читаете асинхронно? Он реализует IDataInput, позволяя читать из него, пока bytesAvailable больше 0.

в каждом событии прогресса вы можете просто readBytes в вывод ByteArray, и как только вы получите полное событие, вы можете использовать его.

Greetz
back2dos

...