So come utilizzare il AssetManager
per leggere un File
dalla directory res/raw
con una InputStream
, ma per il mio caso d'uso speciale Ho bisogno di un FileInputStream
. Il motivo per cui ho bisogno di un FileInputStream
è perché ho bisogno di ottenere l'oggetto FileChannel
da esso chiamando getChannel()
.Come arrivare FileInputStream di file nella cartella di asset
Questo è il codice che ho finora, legge i dati (nel mio caso un elenco di primitive) da un File
:
public static int[] loadByMappedBuffer(Context context, String filename) throws IOException{
FileInputStream fis = context.openFileInput(filename);
FileChannel ch = fis.getChannel();
MappedByteBuffer mbuff = ch.map(MapMode.READ_ONLY, 0, ch.size());
IntBuffer ibuff = mbuff.asIntBuffer();
int[] array = new int[ibuff.limit()];
ibuff.get(array);
fis.close();
ch.close();
return array;
}
avevo cercato di creare File
da un Uri
, ma che appena si traduce in un FileNotFoundException
:
Uri uri = Uri.parse("android.resource://com.example.empty/raw/file");
File file = new File(uri.getPath());
FileInputStream fis = new FileInputStream(file);
c'è un modo posso ottenere un FileInputStream
ad un File
nella directory res/raw
?
Penso che il vostro URL è l'problem.And si dovrebbe aggiungere dalla directory beni. –
Quindi tutto ciò che serve è leggere il contenuto del file come array int. Ho ragione? – Ayzen
@Ayzen sì, ma ho bisogno di renderlo veloce, metodo, che ho dato legge 80K * 4 byte e trasformarlo in array int da 6-7 ms sul mio PC –