Gebufferde readers
Lees efficiënt met bufio
Gebufferde readers is een gratis Go Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Go Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Go Academy bevat in totaal 4 lessen.
Waarom lezen met buffers
Als je telkens één byte uit een bestand of netwerkverbinding leest, wordt elke keer een systeemaanroep uitgevoerd. Dat is langzaam.
Het pakket bufio wikkelt een lezer in en leest grote blokken in een buffer in het geheugen. Kleine leesbewerkingen worden vervolgens vanuit die buffer uitgevoerd.
- Minder systeemaanroepen
- Veel sneller bij veel kleine leesbewerkingen
Een bufio.Reader maken
Wikkel elke io.Reader in met bufio.NewReader. Hier wikkelen we een strings.Reader in.
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
r := bufio.NewReader(strings.NewReader("Hello, Go!"))
fmt.Printf("buffered reader ready: %T\n", r)
}Bytes lezen
ReadByte retourneert de volgende afzonderlijke byte. Die wordt uit de buffer geleverd, niet via een nieuwe systeemaanroep.
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
r := bufio.NewReader(strings.NewReader("Go"))
b1, _ := r.ReadByte()
b2, _ := r.ReadByte()
fmt.Printf("%c%c\n", b1, b2)
}ReadString tot een scheidingsteken
ReadString(delim) leest tot aan het eerste voorkomen van de byte van het scheidingsteken en retourneert alles inclusief het scheidingsteken.
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
r := bufio.NewReader(strings.NewReader("first,second,third"))
part, _ := r.ReadString(',')
fmt.Printf("%q\n", part)
}Vooruitkijken
Peek(n) retourneert de volgende n bytes zonder ze te verbruiken. Dat is handig om te bepalen hoe je iets parseert voordat je die keuze definitief maakt.
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
r := bufio.NewReader(strings.NewReader("HTTP/1.1"))
head, _ := r.Peek(4)
fmt.Printf("starts with: %s\n", head)
}Buffergrootte
bufio.NewReaderSize(r, size) stelt de capaciteit van de buffer in. Een grotere buffer betekent minder onderliggende leesbewerkingen, maar gebruikt meer geheugen.
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
r := bufio.NewReaderSize(strings.NewReader("data"), 4096)
fmt.Println("buffer size:", r.Size())
}ReadLine versus ReadString
ReadString('\n') behoudt de nieuwe regel; veel parsers verwijderen die liever. De Scanner in de volgende les doet dat automatisch.
Gebruik ReadString als je volledige controle over scheidingstekens nodig hebt.
io.EOF afhandelen
Wanneer de onderliggende gegevensstroom is uitgeput, retourneren leesmethoden io.EOF. Controleer dit altijd, zodat je weet wanneer je moet stoppen.
package main
import (
"bufio"
"fmt"
"io"
"strings"
)
func main() {
r := bufio.NewReader(strings.NewReader("ab"))
for {
c, err := r.ReadByte()
if err == io.EOF {
break
}
fmt.Printf("%c", c)
}
fmt.Println()
}ReadRune voor Unicode
ReadRune decodeert een volledige UTF-8-rune, die uit meerdere bytes kan bestaan. Gebruik dit voor tekst met niet-ASCII-tekens.
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
r := bufio.NewReader(strings.NewReader("héllo"))
for {
ru, _, err := r.ReadRune()
if err != nil {
break
}
fmt.Printf("%c ", ru)
}
fmt.Println()
}Lezen tot het einde
Een veelgebruikt patroon is om met ReadString in een lus te lezen tot EOF, zodat je een gegevensstroom regel voor regel kunt verwerken en toch volledige controle houdt.
package main
import (
"bufio"
"fmt"
"io"
"strings"
)
func main() {
r := bufio.NewReader(strings.NewReader("a\nb\nc\n"))
for {
line, err := r.ReadString('\n')
fmt.Print("got: " + line)
if err == io.EOF {
break
}
}
}Wanneer gebruik je bufio.Reader
- Trage bronnen inwikkelen (bestanden, sockets)
- Veel kleine leesbewerkingen uitvoeren
- Vooruitkijken of lezen op basis van een scheidingsteken of rune
Gebruik voor eenvoudig regel-voor-regel scannen bij voorkeur bufio.Scanner (volgende les).
Korte controle
Test je begrip van lezers met buffer.
Samenvatting
Je hebt geleerd hoe bufio.Reader het aantal systeemaanroepen vermindert door buffering.
NewReader/NewReaderSizewikkelen een io.Reader inReadByte,ReadRune,ReadStringlezen vanuit de bufferPeekkijkt vooruit zonder gegevens te verbruiken- Stop bij
io.EOF
Leer Go met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 51
- Lessen
- 203
Veelgestelde vragen
Is de les “Gebufferde readers” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad Go Academy, waaronder “Gebufferde readers”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Go Academy bevat in totaal 4 lessen.
Wat leer ik in “Gebufferde readers”?
Lees efficiënt met bufio Je oefent met Go Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Go Academy te beginnen?
Ervaring vooraf is niet nodig. Go Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.
Hoe lang duurt de les “Gebufferde readers”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Go Academy?
Ja. Elke les over Go Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Gebufferde readers
- Scanners
- Gebufferde writers
- Grote bestanden streamen