У меня возникает странная проблема при чтении из InputStream на платформе Android. Я не уверен, что это конкретная проблема с Android, или что-то, что я делаю неправильно вообще.
Единственное, что касается Android, это вызов:
InputStream is = getResources().openRawResource(R.raw.myfile);
Это возвращает InputStream для файла из активов Android. В любом случае, здесь, где я столкнулся с проблемой:
bytes[] buffer = new bytes[2];
is.read(buffer);
Когда функция read() запускает исключение IOException. Странно то, что если я делаю два последовательных однобайтовых чтения (или любое количество однобайтовых чтений), исключений нет. В примере это работает:
byte buffer;
buffer = (byte)buffer.read();
buffer = (byte)buffer.read();
Любая идея, почему работают два последовательных однобайтовых чтения, но один вызов читать оба сразу бросает исключение? InputStream кажется прекрасным... is.available()
возвращает более миллиона байт (как и должно быть).
Трассировка стека показывает эти строки непосредственно перед InputStream.read()
:
java.io.IOException
at android.content.res.AssetManager.readAsset(Native Method)
at android.content.res.AssetManager.access$800(AssetManager.java:36)
at android.content.res.AssetManager$AssetInputStream.read(AssetManager.java:542)
Изменение размера буфера на один байт по-прежнему вызывает ошибку. Похоже, что исключение возникает только при чтении в массив байтов.
Если я усекаю файл до 100 000 байт (файл: 1,917,408 байт изначально), он отлично работает. Есть ли проблема с файлами определенного размера?
Любая помощь приветствуется!
Спасибо!