0Pricing
Go Academy · Ders

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 / NewReaderSize bir io.Reader'ı sarar
  • ReadByte, ReadRune, ReadString verileri arabellekten sağlar
  • Peek verileri tüketmeden ileriyi görüntüler
  • io.EOF geldiğ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

  1. Arabelleğe Alınmış Okuyucular
  2. Tarayıcılar
  3. Arabelleğe Alınmış Yazıcılar
  4. Büyük Dosyaları Akışla İşleme
← Go Academy Sayfasına Dön