Arabelleğe Alınmış Okuyucular
bufio ile verimli okuyun
Arabelleğe Alınmış Okuyucular, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.
Buffer Okumaları Neden Gerekli
Bir dosyadan veya ağdan her seferinde bir bayt okumak, her defasında bir sistem çağrısını tetikler. Bu yavaştır.
bufio paketi bir okuyucuyu sarar ve büyük parçalar hâlinde bellekteki bir arabelleğe okur; küçük okumalarınızı bu arabellekten karşılar.
- Daha az sistem çağrısı
- Çok sayıda küçük okumada çok daha hızlı
bufio.Reader Oluşturma
Herhangi bir io.Reader'ı bufio.NewReader ile sarın. Burada bir strings.Reader'ı sarıyoruz.
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
r := bufio.NewReader(strings.NewReader("Hello, Go!"))
fmt.Printf("buffered reader ready: %T\n", r)
}Bytes Okuma
ReadByte bir sonraki tek baytı döndürür. Bu, yeni bir sistem çağrısından değil, arabellekten karşılanır.
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 ile Sınırlayıcıya Kadar
ReadString(delim), sınırlayıcı baytın ilk karşılaşmasına kadar okur ve sınırlayıcı da dahil olmak üzere her şeyi döndürür.
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
r := bufio.NewReader(strings.NewReader("first,second,third"))
part, _ := r.ReadString(',')
fmt.Printf("%q\n", part)
}İlerisini Önceden Görüntüleme
Peek(n), sonraki n baytı tüketmeden döndürür. Ayrıştırmaya kesin olarak başlamadan önce nasıl ayrıştırma yapılacağına karar vermek için çok kullanışlıdır.
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)
}Buffer Boyutu
bufio.NewReaderSize(r, size) arabellek kapasitesini ayarlar. Daha büyük bir arabellek, temel kaynaktan daha az okuma yapılması anlamına gelir; ancak daha fazla bellek kullanır.
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
r := bufio.NewReaderSize(strings.NewReader("data"), 4096)
fmt.Println("buffer size:", r.Size())
}ReadLine ve ReadString Karşılaştırması
ReadString('\n') satır sonunu korur; birçok ayrıştırıcı satır sonunu kaldırmayı tercih eder. Scanner (sonraki derste) bunu sizin için otomatik olarak yapar.
Sınırlayıcılar üzerinde tam denetim gerektiğinde ReadString kullanın.
io.EOF İşleme
Temel akış tükendiğinde okuma yöntemleri io.EOF döndürür. Ne zaman duracağınızı bilmek için bunu her zaman denetleyin.
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()
}Unicode için ReadRune
ReadRune, birden çok bayta yayılabilen tam bir UTF-8 karakterini çözümler. ASCII dışı karakterler içeren metinler için kullanın.
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()
}Tamamlanana Kadar Okuma
Yaygın bir kalıp şudur: Bir akışı satır satır işlerken ayrıntılı denetimi korumak için ReadString ile EOF'a kadar döngü kurun.
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
}
}
}bufio.Reader Ne Zaman Kullanılmalı
- Yavaş kaynakları sarmak için (dosyalar, yuvalar)
- Çok sayıda küçük okuma için
- Önceden görüntüleme veya sınırlayıcıya/karaktere göre okuma gerektiğinde
Basit satır tarama işlemleri için bufio.Scanner'ı tercih edin (sonraki ders).
Hızlı Kontrol
Arabellekli okuyucular hakkındaki anlayışınızı sınayın.
Özet
bufio.Reader'ın arabelleğe alma yoluyla sistem çağrılarını nasıl azalttığını öğrendiniz.
NewReader/NewReaderSizebir io.Reader'ı sararReadByte,ReadRune,ReadStringverileri arabellekten sağlarPeekverileri tüketmeden ileriyi görüntülerio.EOFgeldiğinde durun
Sıkça Sorulan Sorular
“Arabelleğe Alınmış Okuyucular” dersi ücretsiz mi?
Evet — “Arabelleğe Alınmış Okuyucular” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.
“Arabelleğe Alınmış Okuyucular” dersinde ne öğreneceğim?
bufio ile verimli okuyun Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Go Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Arabelleğe Alınmış Okuyucular” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Arabelleğe Alınmış Okuyucular
- Tarayıcılar
- Arabelleğe Alınmış Yazıcılar
- Büyük Dosyaları Akışla İşleme