Büyük Dosyaları Akışla İşleme
Tümünü yüklemeden dosyaları işleyin
Büyük Dosyaları Akışla İşleme, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 4. 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.
Her Şeyi Yüklemenin Sorunu
Çok gigabaytlık bir dosyayı os.ReadFile ile belleğe okumak RAM'i tüketebilir. Bunun yerine veriyi akış olarak işleyin: parçaları geldikçe işleyin.
Akış Kavramı
Akış kullanmak, aynı anda bellekte yalnızca küçük bir veri penceresi tutmanız anlamına gelir. Arabelleğe alma ile birleştirildiğinde, keyfi büyüklükteki girdileri sabit bellek kullanımıyla işlersiniz.
Scanner ile Satır Satır
Metin için, bir okuyucu üzerindeki bufio.Scanner, dosya boyutundan bağımsız olarak tek seferde bir satırı işler. Burada bir dosyayı strings.Reader ile benzetiyoruz.
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
src := strings.NewReader("alpha\nbeta\ngamma")
s := bufio.NewScanner(src)
for s.Scan() {
fmt.Println("processed:", s.Text())
}
}Yüklemeden Sayma
Bellekte neredeyse hiç veri tutmadan büyük bir akış üzerinde istatistikler hesaplayabilirsiniz.
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
s := bufio.NewScanner(strings.NewReader("a\nbb\nccc"))
total := 0
for s.Scan() {
total += len(s.Text())
}
fmt.Println("total chars:", total)
}Sabit Boyutlu Parçalar
İkili veriler için Read ile sabit boyutlu bir arabelleğe okuyun. n, kaç baytın doldurulduğunu bildirir.
package main
import (
"fmt"
"io"
"strings"
)
func main() {
src := strings.NewReader("0123456789")
buf := make([]byte, 4)
for {
n, err := src.Read(buf)
if n > 0 {
fmt.Printf("chunk: %s\n", buf[:n])
}
if err == io.EOF {
break
}
}
}Akış için io.Copy
io.Copy(dst, src), bir okuyucudaki her şeyi küçük bir dahili arabellek kullanarak yazıcıya aktarır; verinin tamamı belleğe yüklenmez.
package main
import (
"io"
"os"
"strings"
)
func main() {
src := strings.NewReader("streamed straight through\n")
io.Copy(os.Stdout, src)
}Reader ve Writer Arabelleklerini Birleştirme
Verimli akış dönüşümleri için her iki ucu da bufio ile sarın: arabelleğe alınmış okuma, işleme, arabelleğe alınmış yazma ve Flush.
package main
import (
"bufio"
"os"
"strings"
)
func main() {
r := bufio.NewScanner(strings.NewReader("one\ntwo"))
w := bufio.NewWriter(os.Stdout)
defer w.Flush()
for r.Scan() {
w.WriteString(r.Text() + "!\n")
}
}Sabit Bellek Kullanımı Garantisi
Arabellek boyutu sabit olduğundan, girdi 1KB veya 1TB olsa da bellek kullanımı değişmez. Akış kullanmanın temel avantajı budur.
Yaygın Hatalardan Kaçınma
- Büyük dosyalarda
os.ReadFileçağrısı yapmayın - Hatayı denetlemeden önce her zaman
nbaytı işleyin - Arabelleğe alınmış yazıcılarda
Flush()çağrısı yapmayı unutmayın
Akış Dönüştürme
Burada her satırı akıştan geçerken büyük harfe dönüştürüyor ve aynı anda bellekte yalnızca bir satır tutuyoruz.
package main
import (
"bufio"
"os"
"strings"
)
func main() {
s := bufio.NewScanner(strings.NewReader("hi\nthere"))
w := bufio.NewWriter(os.Stdout)
defer w.Flush()
for s.Scan() {
w.WriteString(strings.ToUpper(s.Text()) + "\n")
}
}Ne Zaman Akış Kullanılmalı
Girdi boyutu büyük veya bilinmiyorsa ya da girdiyi parça parça işleyebiliyorsanız akış kullanın. Yalnızca küçük, sınırları belli ve tamamına aynı anda ihtiyaç duyduğunuz verileri bütünüyle yükleyin.
Hızlı Kontrol
Akış kullanımı bilginizi sınayın.
Özet
Büyük verileri tamamını belleğe yüklemeden işlemeyi öğrendiniz.
- Satır satır metin için Scanner
- İkili parçalar için sabit boyutlu
Read - Akıştan akışa aktarım için
io.Copy - Her iki ucu da arabelleğe alın, yazıcıları Flush edin, sabit bellek kullanın
Sıkça Sorulan Sorular
“Büyük Dosyaları Akışla İşleme” dersi ücretsiz mi?
Evet — “Büyük Dosyaları Akışla İşleme” 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.
“Büyük Dosyaları Akışla İşleme” dersinde ne öğreneceğim?
Tümünü yüklemeden dosyaları işleyin 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 4. dersidir.
“Büyük Dosyaları Akışla İşleme” 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