Ce face bytes.Buffer.ReadFrom
buf.ReadFrom(r) citește din r până la sfârșit (io.EOF) și adaugă totul în buffer, mărindu-l cât e nevoie. Returnează numărul de octeți citiți; io.EOF nu este raportat ca eroare.
buf.WriteTo(w) scrie toată partea necitită în w (un fișier, os.Stdout, o conexiune) și golește bufferul. Ambele metode sunt folosite automat de io.Copy când una dintre părți este un *bytes.Buffer.
Parametri
| Parametru | Descriere |
|---|---|
r |
La ReadFrom: sursa. |
w |
La WriteTo: destinația. |
Ce returnează
Numărul de octeți transferați (int64) și eroarea.
Exemple
Exemplul 1: Citirea unui fișier întreg în buffer
package main
import (
"bytes"
"fmt"
"os"
)
func main() {
os.WriteFile("note.txt", []byte("Ana 10\nIon 8\n"), 0o644)
f, err := os.Open("note.txt")
if err != nil {
fmt.Println(err)
return
}
defer f.Close()
var buf bytes.Buffer
n, err := buf.ReadFrom(f)
fmt.Println("citit:", n, "octeți, eroare:", err)
fmt.Print(buf.String())
}
Rezultat
citit: 13 octeți, eroare: <nil>
Ana 10
Ion 8
Exemplul 2: WriteTo pe ecran golește bufferul
package main
import (
"bytes"
"fmt"
"os"
"strings"
)
func main() {
var buf bytes.Buffer
buf.ReadFrom(strings.NewReader("Raport: totul este în regulă.\n"))
n, _ := buf.WriteTo(os.Stdout)
fmt.Println("scris:", n, "octeți; rămas în buffer:", buf.Len())
}
Rezultat
Raport: totul este în regulă.
scris: 32 octeți; rămas în buffer: 0
Greșeli frecvente
- Folosești
ReadFrompe surse foarte mari sau fără sfârșit (o conexiune deschisă): bufferul crește până se termină memoria. Pentru date mari, prelucrează în bucăți sau limitează cuio.LimitReader.
Comenzi înrudite
bytes.Buffer: Un buffer de octeți care crește singur: scrii în el cu Write/WriteString/WriteByte/WriteRune și citești cu String() sau Bytes().strings.Reader: Face dintr-un text o sursă de citire (io.Reader), ca să-l dai funcțiilor care citesc din fișiere sau rețea.bytes.Buffer.Read: Citește din buffer octeți (Read, ReadByte) sau caractere (ReadRune); UnreadByte și UnreadRune pun înapoi ultima citire.