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?

È stato utile?

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

(V) ContentResolver.openInputStream(Uri uri) e InputStream.read(byte[] b) lancerà IOException in modo da poterlo gestire.

(VI) ATTENZIONE: IndexOutOfBoundException potrebbe verificarsi se arrSize> MAX_SIZE, Potrebbe essere necessario aggiungere la clausola IF-else per gestire tale problema.

Sentiti libero di commentare o modificare il codice se c'è qualche errore o se c'è un modo più veloce per farlo. Codifica felice

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top