La lecture HttpURLConnection InputStream - manuel de tampon ou BufferedInputStream?
Lors de la lecture de l'InputStream d'un HttpURLConnection, est-il une raison pour utiliser l'une des opérations suivantes sur les autres? J'ai vu les deux utilisés dans les exemples.
Manuel De La Mémoire Tampon:
while ((length = inputStream.read(buffer)) > 0) {
os.write(buf, 0, ret);
}
BufferedInputStream
is = http.getInputStream();
bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append(current);
}
MODIFIER je suis encore nouveau pour HTTP en général, mais une considération qui vient à l'esprit est que si je suis en utilisant une persistance de la connexion HTTP, je ne peux pas lire jusqu'à ce que le flux d'entrée est vide à droite? Dans ce cas, n'aurais-je pas besoin de lire le message de longueur et il suffit de lire le flux d'entrée pour cette durée?
Et de la même façon, si vous n'utilisez PAS une connexion permanente, c'est le code que j'ai inclus 100% bon pour aller en termes de lecture du flux correctement?
ByteArrayBuffer
? Mais il n'y a aucune raison de traiter les octets lorsque vous pourriez avoir affaire à des tableaux d'octets.OriginalL'auteur stormin986 | 2010-05-08
Vous devez vous connecter pour publier un commentaire.
Que je parle d'une bonne façon de le faire sur mon blog dans un post sur l'utilisation de JSON dans android. http://blog.andrewpearson.org/2010/07/android-why-to-use-json-and-how-to-use.html. Je vais poster la partie pertinente de la post ci-dessous (le code est assez généralisable):
OriginalL'auteur Andrew
Concernant les connexions HTTP persistantes c'est tout le contraire. Vous tout lire depuis le flux d'entrée. Sinon, le Java HTTP client ne sait pas que la requête HTTP est terminée et la connexion de socket peut être réutilisé.
Voir http://java.sun.com/javase/6/docs/technotes/guides/net/http-keepalive.html:
OriginalL'auteur Robert
Utiliser l'ancien -- ci n'a pas de réels avantages par rapport au premier, et est un peu plus lent; lire des choses octet par octet est inefficace, même si la mémoire tampon (bien qu'horriblement lent lorsqu'il n'est pas tamponnée). Ce style de lecture d'entrée sortit de vogue avec le C, mais peut être utile dans le cas où vous avez besoin de trouver un marqueur de fin de quelque sorte.
OriginalL'auteur StaxMan
Uniquement si vous utilisez le
BufferedInputStream
de méthodes spécifiques.Le
BufferedInputStream
des méthodes spécifiques comme quoi? Il n'a pas d'exporter des méthodes autres que celles définies par l'InputStream
.OriginalL'auteur Delan Azabani