Come avvolgere i contenuti URI con un NIO.ByTeBuffer su Android?
-
21-12-2019 - |
Domanda
Sto cercando di leggere i contenuti da un URI su Android, e ho bisogno del tipo di oggetto finale passato all'SDK sottostante da un NIO.ByteBuffer.
Posso mettere le mani su un inputstream, tramite ContentResolver ma non ha trovato un modo per avvolgerlo con un Nio.ByTeBuffer.
C'è un modo per convertire un contenuto URI su un NIO.ByteBuffer su Android?
Soluzione
Ho finito per scaricare il contenuto dell'URI localmente e aprilo tramite altri metodi per ottenere il bytebuffer
Altri suggerimenti
Supponiamo che tu stia lavorando su un'attività,
private ByteBuffer getByteBuffer(Uri uri){
try{
InputStream iStream = getContentResolver().openInputStream(uri);
if(iStream!=null){
//value of MAX_SIZE is up to your requirement
final int MAX_SIZE = 5000000;
byte[] byteArr = new byte[MAX_SIZE];
int arrSize = 0;
while(true){
int value = iStream.read(byteArr);
if(value == -1){
break;
}else{
arrSize += value;
}
}
iStream.close();
return ByteBuffer.wrap(byteArr, 0, arrSize);
}
}catch(IOException e){
//do something
}
return null;
}
.
Note:
(i) InputStream.read(byte[] b)
restituirà un numero intero che indica il numero totale di byte di lettura nell'array Byte b
in ogni momento.
(II) Se InputStream.read(Byte[] b)
restituisce -1, indica che è la fine dell'inputstream.
(iii) arrSize
Memorizza il numero totale di byte Leggi, I.e. La lunghezza del byte[] b
(iv) ByteBuffer.wrap(byte[] b, int offset, int length)
avvolgerà l'array Byte per dare un bytebuffer. Puoi controllare questo Riferimento