0Pricing
Go Academy · Pelajaran

Reader Berbuffer

Baca secara efisien dengan bufio

Reader Berbuffer adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.

Mengapa Pembacaan dengan Buffer

Membaca satu bita setiap kali dari berkas atau jaringan memicu panggilan sistem setiap kali. Itu lambat.

Paket bufio membungkus pembaca dan membaca data dalam potongan besar ke dalam penyangga di memori, lalu melayani pembacaan kecil Anda dari penyangga tersebut.

  • Lebih sedikit panggilan sistem
  • Jauh lebih cepat untuk banyak pembacaan kecil

Membuat bufio.Reader

Bungkus io.Reader apa pun dengan bufio.NewReader. Di sini, kita membungkus strings.Reader.

package main

import (
	"bufio"
	"fmt"
	"strings"
)

func main() {
	r := bufio.NewReader(strings.NewReader("Hello, Go!"))
	fmt.Printf("buffered reader ready: %T\n", r)
}

Membaca Bytes

ReadByte mengembalikan bita tunggal berikutnya. Bita tersebut diambil dari penyangga, bukan melalui panggilan sistem baru.

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 ke Pembatas

ReadString(delim) membaca hingga kemunculan pertama bita pembatas, lalu mengembalikan semuanya termasuk pembatas tersebut.

package main

import (
	"bufio"
	"fmt"
	"strings"
)

func main() {
	r := bufio.NewReader(strings.NewReader("first,second,third"))
	part, _ := r.ReadString(',')
	fmt.Printf("%q\n", part)
}

Melihat Data Berikutnya

Peek(n) mengembalikan n bita berikutnya tanpa mengonsumsinya. Ini sangat berguna untuk menentukan cara mengurai data sebelum menetapkannya.

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)
}

Ukuran Buffer

bufio.NewReaderSize(r, size) menetapkan kapasitas penyangga. Penyangga yang lebih besar berarti lebih sedikit pembacaan dari sumber yang mendasarinya, tetapi membutuhkan lebih banyak memori.

package main

import (
	"bufio"
	"fmt"
	"strings"
)

func main() {
	r := bufio.NewReaderSize(strings.NewReader("data"), 4096)
	fmt.Println("buffer size:", r.Size())
}

ReadLine dibandingkan ReadString

ReadString('\n') mempertahankan baris baru; banyak pengurai lebih suka menghapusnya. Scanner pada pelajaran berikutnya menanganinya secara otomatis.

Gunakan ReadString saat Anda memerlukan kendali penuh atas pembatas.

Menangani io.EOF

Saat aliran yang mendasarinya habis, metode pembacaan mengembalikan io.EOF. Selalu periksalah nilainya untuk mengetahui kapan harus berhenti.

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 untuk Unicode

ReadRune mendekode karakter UTF-8 lengkap, yang dapat mencakup beberapa bita. Gunakan ini untuk teks dengan karakter non-ASCII.

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()
}

Membaca hingga Selesai

Pola yang umum adalah mengulang dengan ReadString hingga EOF untuk memproses aliran baris demi baris sambil tetap mempertahankan kendali terperinci.

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
		}
	}
}

Kapan Menggunakan bufio.Reader

  • Membungkus sumber yang lambat, seperti berkas dan soket
  • Banyak pembacaan kecil
  • Perlu melihat data berikutnya atau membaca berdasarkan pembatas/karakter

Untuk pemindaian baris sederhana, pilih bufio.Scanner pada pelajaran berikutnya.

Pemeriksaan Singkat

Ujilah pemahaman Anda tentang pembaca berpenyangga.

Ringkasan

Anda telah mempelajari cara bufio.Reader mengurangi panggilan sistem dengan menggunakan penyanggaan.

  • NewReader / NewReaderSize membungkus io.Reader
  • ReadByte, ReadRune, dan ReadString melayani pembacaan dari penyangga
  • Peek melihat data berikutnya tanpa mengonsumsinya
  • Berhentilah saat menerima io.EOF

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Reader Berbuffer” gratis?

Ya — teks lengkap “Reader Berbuffer” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Reader Berbuffer”?

Baca secara efisien dengan bufio Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Go Academy?

Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Reader Berbuffer” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?

Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Reader Berbuffer
  2. Scanner
  3. Writer Berbuffer
  4. Streaming File Besar
← Kembali ke Go Academy