0Pricing
Go Academy · Pelajaran

Streaming File Besar

Proses file tanpa memuat semuanya

Streaming File Besar adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.

Masalah Memuat Semuanya

Membaca berkas berukuran beberapa gigabita ke dalam memori dengan os.ReadFile dapat menghabiskan RAM. Sebagai gantinya, alirkan data tersebut: proses potongan-potongan data saat tiba.

Konsep Pengaliran

Pengaliran berarti Anda hanya menyimpan jendela kecil data di memori pada satu waktu. Jika digabungkan dengan penyanggaan, Anda dapat memproses masukan sebesar apa pun dengan penggunaan memori yang konstan.

Baris demi Baris dengan Scanner

Untuk teks, bufio.Scanner di atas pembaca memproses satu baris setiap kali, terlepas dari ukuran berkas. Di sini, kita menyimulasikan berkas dengan strings.Reader.

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())
	}
}

Menghitung tanpa Memuat Semuanya

Anda dapat menghitung statistik dari aliran yang sangat besar sambil menyimpan hampir tidak ada data di memori.

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)
}

Potongan Berukuran Tetap

Untuk data biner, baca ke dalam penyangga berukuran tetap dengan Read. n memberi tahu jumlah bita yang terisi.

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
		}
	}
}

io.Copy untuk Pengaliran

io.Copy(dst, src) mengalirkan semuanya dari pembaca ke penulis menggunakan penyangga internal kecil — tanpa memuat seluruh data.

package main

import (
	"io"
	"os"
	"strings"
)

func main() {
	src := strings.NewReader("streamed straight through\n")
	io.Copy(os.Stdout, src)
}

Menggabungkan Penyangga Pembaca dan Penulis

Bungkus kedua ujungnya dengan bufio untuk transformasi aliran yang efisien: membaca dengan penyangga, memproses, menulis dengan penyangga, lalu mengeluarkan isinya.

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")
	}
}

Jaminan Memori Konstan

Karena ukuran penyangga tetap, penggunaan memori tetap konstan, baik masukannya berukuran 1KB maupun 1TB. Inilah keunggulan utama pengaliran.

Menghindari Kesalahan Umum

  • Jangan panggil os.ReadFile pada berkas berukuran sangat besar
  • Selalu tangani n bita sebelum memeriksa kesalahan
  • Ingatlah untuk memanggil Flush() pada penulis berpenyangga

Mengubah Aliran

Di sini, kita mengubah setiap baris menjadi huruf besar saat mengalir, dengan hanya menyimpan satu baris di memori pada satu waktu.

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")
	}
}

Kapan Harus Mengalirkan Data

Alirkan data saat ukuran masukan besar atau tidak diketahui, atau saat Anda dapat memprosesnya secara bertahap. Muat seluruhnya hanya untuk data kecil dan terbatas yang perlu Anda gunakan sekaligus.

Pemeriksaan Singkat

Ujilah pengetahuan Anda tentang pengaliran data.

Ringkasan

Anda telah mempelajari cara memproses data besar tanpa memuat semuanya.

  • Scanner untuk teks baris demi baris
  • Read berukuran tetap untuk potongan data biner
  • io.Copy untuk pengaliran dari satu aliran ke aliran lain
  • Sangga kedua ujungnya, keluarkan isi penulis, dan gunakan memori konstan

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Streaming File Besar” gratis?

Ya — teks lengkap “Streaming File Besar” 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 “Streaming File Besar”?

Proses file tanpa memuat semuanya 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 4 dari 4.

Berapa lama pelajaran “Streaming File Besar” 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

  1. Reader Berbuffer
  2. Scanner
  3. Writer Berbuffer
  4. Streaming File Besar
← Kembali ke Go Academy