Я реализовал структуру данных, которая работает на моем компьютере, и теперь я пытаюсь перенести ее в свое приложение для Android. Я открываю необработанный .dat
ресурс и получаю InputStream
, но мне нужно получить FileInputStream
:
FileInputStream fip = (FileInputStream) context.getResources().openRawResource(fileID);
FileChannel fc = fip.getChannel();
long bytesSizeOfFileChannel = fc.size();
MappedByteBuffer mbb = fc.map(FileChannel.MapMode.READ_ONLY, 0L, bytesSizeOfFileChannel);
...
Приведенный выше код вызывает следующее исключение, поскольку InputStream не может быть преобразован в FileInputStream, но это как раз то, что мне нужно:
java.lang.ClassCastException: android.content.res.AssetManager$AssetInputStream cannot be cast to java.io.FileInputStream
Весь мой код построен на использовании этого FileChannel
с FileInputStream, поэтому я хочу продолжать его использовать. Есть ли способ перейти от InputStream
к context.getResources().openRawResource(fileID)
, а затем преобразовать его в FileChannel
?
В некоторой степени релевантные сообщения, в которых я не смог найти рабочего решения для моего случая, какой android:
Как преобразовать InputStream в FileInputStream
Преобразование inputStream в FileInputStream?
Использование FileChannel для записи любого InputStream?
MappedByteBuffer
для JVM Java 6 является быстрым при чтении файла. Android не использует Java 6 JVM, и вы не читаете файл. Android запускает либо виртуальную машину Dalvik, либо использует ART (в зависимости от версии Android), и вы читаете ресурс (который в основном представляет собой запись в ZIP-файле). Содержание этой статьи не имеет отношения к делу. - person CommonsWare   schedule 09.05.2015