Go Academy · Les

Gebufferde readers

Lees efficiënt met bufio

Les 1 van 413 stappen

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 / NewReaderSize wikkelen een io.Reader in
  • ReadByte, ReadRune, ReadString lezen vanuit de buffer
  • Peek kijkt vooruit zonder gegevens te verbruiken
  • Stop bij io.EOF
Gratis beginnen

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

  1. Gebufferde readers
  2. Scanners
  3. Gebufferde writers
  4. Grote bestanden streamen
← Terug naar Go Academy