J'essaye de regarder un contenu de flux d'entrée de HttpClient, jusqu'à 64k bytes.Est-il possible de jeter un coup d'œil sur org.apache.http.conn.EofSensorInputStream de HttpClient?
Le flux provient d'un HttpGet, rien d'inhabituel à ce sujet:
HttpGet requestGet = new HttpGet(encodedUrl); HttpResponse httpResponse = httpClient.execute(requestGet); int status = httpResponse.getStatusLine().getStatusCode(); if (status == HttpStatus.SC_OK) { return httpResponse.getEntity().getContent(); }
Le flux d'entrée, il retourne est de type org.apache.http.conn.EofSensorInputStream
Notre cas d'utilisation est telle que nous devons « coup d'oeil "au premier (jusqu'à 64k) octets du flux d'entrée. J'utilise un algorithme décrit ici How do I peek at the first two bytes in an InputStream?
PushbackInputStream pis = new PushbackInputStream(inputStream, DEFAULT_PEEK_BUFFER_SIZE); byte [] peekBytes = new byte[DEFAULT_PEEK_BUFFER_SIZE]; int read = pis.read(peekBytes); if (read < DEFAULT_PEEK_BUFFER_SIZE) { byte[] trimmed = new byte[read]; System.arraycopy(peekBytes, 0, trimmed, 0, read); peekBytes = trimmed; } pis.unread(peekBytes);
Lorsque j'utilise un ByteArrayInputStream, cela fonctionne sans problème.
Problème: Lors de l'utilisation du org.apache.http.conn.EofSensorInputStream
, je n'obtiens qu'un petit nombre d'octets au début du flux. généralement autour de 400 octets. Quand je m'attendais jusqu'à 64k octets.
J'ai également essayé d'utiliser un BufferedInputStream
où je lis jusqu'à la première 64k octets puis appelez un .reset()
mais cela ne fonctionne pas non plus. Même problème.
Pourquoi cela pourrait-il être? Je ne pense pas que quelque chose ferme le flux parce que si vous appelez IOUtils.toString(inputStream)
, je reçois tout le contenu.
aw dang it! une idée de comment le faire revenir plus? est-ce que j'utilise simplement le décalage et fais une autre demande? es-tu sûr que ce n'est pas juste de dire que ça retournera moins d'octets s'il n'en reste plus? –
Oui, je suis tout à fait sûr. Vous avez juste besoin de continuer à lire dans une boucle jusqu'à ce que la quantité désirée de données ait été reçue ou que la fin du flux soit atteinte. – oleg
OK! homme cool! l'essayer! –