Ho implementato una struttura dati che sta funzionando sul mio computer e ora sto cercando di portarlo nella mia applicazione Android. Apro una risorsa grezza .dat
e ottenere un InputStream
, ma ho bisogno di ottenere un FileInputStream
:È necessario convertire AssetInputStream in 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);
...
Il codice di cui sopra genera la seguente eccezione in quanto un InputStream non può essere lanciato ad un FileInputStream ma questo è solo quello che mi serve:
java.lang.ClassCastException: android.content.res.AssetManager$AssetInputStream cannot be cast to java.io.FileInputStream
Tutto il mio codice si basa sull'uso di questo FileChannel
con un FileInputStream, quindi voglio continuare a utilizzarlo. C'è un modo per passare dallo InputStream
allo context.getResources().openRawResource(fileID)
e quindi convertirlo in un FileChannel
?
messaggi po 'rilevanti in cui non riuscivo a trovare una soluzione di lavoro per il mio caso, che Android:
How to convert InputStream to FileInputStream
Converting inputStream to FileInputStream?
Using FileChannel to write any InputStream?
no, i file di risorse non sono i file "normali", cioè essi non esiste in un file system – pskink
Ho lavorato 2 settimane su questo. Se non riesco a farlo funzionare, riderò per almeno altre 2 settimane. – Joop
perché non puoi semplicemente usare InputStream? – pskink