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/NewReaderSizemembungkusio.ReaderReadByte,ReadRune, danReadStringmelayani pembacaan dari penyanggaPeekmelihat 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
- Reader Berbuffer
- Scanner
- Writer Berbuffer
- Streaming File Besar