0Pricing
Go Academy · Ders

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 n baytı 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

  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