Je suis conscient de la fonction spécifique dans golang à partir du paquet bufio .
func (b *Reader) Peek(n int) ([]byte, error)
Peek renvoie les n octets suivants sans faire avancer le lecteur . Les octets cesser d'être valide à la prochaine lecture appel. Si Peek retourne moins de n octets, il renvoie également une erreur expliquant pourquoi la lecture est courte. Le error est ErrBufferFull si n est supérieur à la taille de la mémoire tampon de b.
Je dois être capable de lire un nombre d'octets spécifique d'un lecteur qui fera avancer le lecteur . Fondamentalement, identique à la fonction ci-dessus, mais cela fait avancer le lecteur. Est-ce que quelqu'un sait comment accomplir cela?
func (b *Reader) Read(p []byte) (n int, err error)
http://golang.org/pkg/bufio/#Reader.Read
Le nombre d'octets lus sera limité à len(p)
Notez que la méthode bufio.Read
appelle le io.Read
sous-jacent au plus une fois, ce qui signifie qu'elle peut renvoyer n < len(p)
sans atteindre EOF. Si vous voulez lire exactement len(p)
octets ou échouer avec une erreur, vous pouvez utiliser io.ReadFull
comme ceci:
n, err := io.ReadFull(reader, p)
Cela fonctionne même si le lecteur est en mémoire tampon.
Passez un tampon de taille n octets au lecteur.
Je préfère Read () surtout si vous lisez n'importe quel type de fichier et que cela peut également être utile pour envoyer des données en morceaux, voici un exemple pour montrer comment il est utilisé
fs, err := os.Open("fileName");
if err != nil{
fmt.Println("error reading file")
return
}
defer fs.Close()
reader := bufio.NewReader(fs)
buf := make([]byte, 1024)
for{
v, _ := reader.Read(buf) //ReadString and ReadLine() also applicable or alternative
if v == 0{
return
}
//in case it is a string file, you could check its content here...
fmt.Print(string(buf))
}