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.ReadFilepada berkas berukuran sangat besar - Selalu tangani
nbita 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
Readberukuran tetap untuk potongan data binerio.Copyuntuk 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
- Reader Berbuffer
- Scanner
- Writer Berbuffer
- Streaming File Besar