Comment lire plusieurs fois, de même io.Lecteur
Je veux utiliser request.Body(type io.ReadCloser)
qui est contenant une image.
Je ne veux pas utiliser ioutil.ReadAll()
que je veux écrire ce corps directement dans le fichier ainsi que de le décrypter, donc je veux seulement utiliser la référence au contenu passer à plus d'appels de fonction,
J'ai essayé de créer plusieurs instances de lecteur pour l'exemple montré ci-dessous
package main
import (
"io/ioutil"
"log"
"strings"
)
func main() {
r := strings.NewReader("some io.Reader stream to be read\n")
a := &r
b := &r
log.Println(ioutil.ReadAll(*a))
log.Println(ioutil.ReadAll(*b))
}
mais dans le deuxième appel, il en résulte toujours nil
.
S'il vous plaît aider moi comment puis-je passer plusieurs séparé de référence pour le même lecteur?
- Annulables la façon dont vous l'avez demandé. Utiliser un
io.TeeReader
pour capturer ce que vous lisez pour de plus amples référence, par exemple dans unebytes.Buffer
.
Vous devez vous connecter pour publier un commentaire.
io.Lecteur
est traité comme un ruisseau. De ce fait, vous ne peut pas le lire deux fois. Imaginez le une connexion TCP entrante. Vous ne pouvez pas revenir en arrière le whats venir dans.Mais vous pouvez utiliser le
io.TeeReader
de reproduire le flux:Exemple sur Aller De L'Aire De Jeux
Lorsque vous appelez
ReadAll
il va vider le tampon, de sorte que le deuxième appel retournera toujours rien. Ce que vous pourriez faire est de sauvegarder le résultat deReadAll
et le réutiliser dans vos fonctions. Par exemple:Techniquement, sur un lecteur, vous ne pouvez pas lire plusieurs fois.
Cela permettra d'imprimer deux fois.
io.Reader
est un flux. Une fois que vous avez fini le flux, il n'y a pas de plus. Si vous lisez une partie du flux, la prochaine lecture continue là où vous l'avez laissé.@TheHippo réponse est correcte, je voulais juste ajouter ceci (mais n'a pas pu l'ajouter car je n'ai que 49 réputation:( ): il est important que vous utilisez le TeeReader d'abord et après l'utilisation de la mémoire tampon où l'info est copié sinon la deuxième solution tampon est vide.