GoDasturchi
Buffered Writing

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.

example.go
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.

Hints (0/3)

Key Takeaway

Key Takeaway:

bufio.Writer ko'p kichik yozuvlarni samarali qiladi, lekin oxirida Flush() chaqirishni hech qachon unutmang.

NEXT UP

Scanner Split Functions

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

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.

example.go
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.

Hints (0/3)

Key Takeaway

Key Takeaway:

bufio.Writer ko'p kichik yozuvlarni samarali qiladi, lekin oxirida Flush() chaqirishni hech qachon unutmang.

NEXT UP

Scanner Split Functions