2010-07-11 3 views
0

Supposons qu'une application obtienne un flux de contenu en étant appelée avec le filtre android.intent.action.SEND. Supposons également Uri et le flux est reçu comme ceci:Déterminer la longueur du contenu d'un Intent.STREAM_EXTRA (Android)

Uri contentUri = (Uri) extras.get(Intent.EXTRA_STREAM); 
InputStream in = getContentResolver().openInputStream(contentUri); 

Maintenant, comment puis-je déterminer la longueur totale du contenu sans lire le flux entier? Est-ce même possible? in.available() n'est pas nécessairement précis, donc je suppose que je dois lire le flux jusqu'à la fin, d'abord?

Le contenu peut être très volumineux, comme environ 50 Mo ou plus. Donc, je préférerais seulement le lire une fois.

Répondre

0

Vous ne pouvez pas déterminer la quantité de données dans un flux sans le lire; vous pouvez cependant passer la longueur via un autre extra si vous êtes la source d'entrée.

Je voudrais lire dans un ByteArrayOutputStream, puis appeler toByteArray() pour obtenir le tableau d'octets résultant. Vous n'avez pas besoin de définir la taille à l'avance (bien que ce soit probablement une optimisation si vous le connaissez Dans la plupart des cas, vous ne le ferez pas)

Questions connexes