Question

J'essaie de lire le contenu d'un Uri sur Android et j'ai besoin du type d'objet final transmis au SDK sous-jacent par un nio.ByteBuffer.

Je peux mettre la main sur un InputStream, via ContentResolver, mais je n'ai pas trouvé de moyen de l'envelopper avec un nio.ByteBuffer.

Existe-t-il un moyen de convertir un contenu Uri en nio.ByteBuffer sur Android ?

Était-ce utile?

La solution

J'ai fini par télécharger le contenu de l'URI localement et ouvrez-le via une autre méthode pour obtenir le byTEBUFFER

Autres conseils

Supposons que vous travaillez sur une activité,

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;
}

Remarques:

(je) InputStream.read(byte[] b) renverra un entier qui indique le nombre total d'octets lus dans le tableau d'octets b à chaque fois.

(ii) Si InputStream.read(Byte[] b) renvoie -1, cela indique que c'est la fin du inputStream.

(iii) arrSize stocke le nombre total d'octets lus, c'est-à-direla longueur de byte[] b

(iv) ByteBuffer.wrap(byte[] b, int offset, int length) encapsulera le tableau d'octets pour donner un ByteBuffer.Vous pouvez vérifier ceci référence

(v) ContentResolver.openInputStream(Uri uri) et InputStream.read(byte[] b) lancera IOException, vous devez donc le gérer.

(vi) Attention : IndexOutOfBoundException pourrait arriver si arrSize > MAX_SIZE, vous devrez peut-être ajouter une clause if-else pour gérer ce problème.

N'hésitez pas à commenter ou à modifier le code s'il y a une erreur ou s'il existe un moyen plus rapide de le faire.Bon codage

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top