Buffered Writing
Buferlangan yozish
Faylga har safar kichik-kichik yozish (masalan sikl ichida minglab marta) sekin bo'lishi mumkin, chunki har bir yozish diskka murojaat qiladi. bufio.Writer yozuvlarni avval xotiradagi "bufer"ga yig'ib, keyin bittalikda diskka jo'natadi — xuddi pochta xatlarini birma-bir emas, bitta qopga yig'ib, keyin bir yo'la jo'natgandek.
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
f, err := os.Create("out.txt")
if err != nil {
fmt.Println("xato:", err)
return
}
defer f.Close()
w := bufio.NewWriter(f)
w.WriteString("qator1\n")
w.WriteString("qator2\n")
w.Flush()
data, _ := os.ReadFile("out.txt")
fmt.Print(string(data))
}os.Create faylni yozish uchun yaratadi (mavjud bo'lsa, bo'shatib tashlaydi). bufio.NewWriter(f) uni buferlangan yozuvchiga o'raydi. Muhim: w.Flush() chaqirilmaguncha, yozganlaringiz faylga to'liq yetib bormasligi mumkin — Flush buferdagi hammasini diskka "quyib yuboradi". Buni unutish — buferlangan yozishdagi eng keng tarqalgan xato.
>_ Exercise
bufio.Writer yordamida bir nechta qatorni faylga yozing.
- •report.txt faylini os.Create bilan yarating
- •bufio.NewWriter bilan o'rab, items ro'yxatidagi har bir elementni "\n" bilan yozing
- •Flush qiling va faylni qayta o'qib chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
bufio.Writer ko'p kichik yozuvlarni samarali qiladi, lekin oxirida Flush() chaqirishni hech qachon unutmang.
NEXT UP
Scanner Split Functions
$ go run main.go
Kodingizni ishga tushiring