PHpullh
학습 라이브러리/Go/bufio 스트리밍

GO · 파일/IO

bufio 스트리밍

bufio로 대용량 파일을 라인 단위로 효율적으로 읽습니다. 메모리를 절약하는 스트리밍 처리입니다.

파일/IO중급bufioscannerstreamingreadline

핵심 설명

bufio로 대용량 파일을 라인 단위로 효율적으로 읽습니다. 메모리를 절약하는 스트리밍 처리입니다.

Go code

package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

func main() {
	// 문자열 리더로 데모
	input := "첫 번째 줄\n두 번째 줄\n세 번째 줄\n"
	reader := bufio.NewReader(strings.NewReader(input))

	for {
		line, err := reader.ReadString('\n')
		line = strings.TrimRight(line, "\n")
		if line != "" {
			fmt.Println("읽음:", line)
		}
		if err != nil { break }
	}

	// Scanner (줄 단위 읽기에 최적)
	scanner := bufio.NewScanner(strings.NewReader(input))
	scanner.Buffer(make([]byte, 1024*1024), 1024*1024) // 최대 1MB
	lineNum := 0
	for scanner.Scan() {
		lineNum++
		fmt.Printf("%d: %s\n", lineNum, scanner.Text())
	}
	if err := scanner.Err(); err != nil {
		fmt.Fprintln(os.Stderr, "읽기 에러:", err)
	}
}

학습 팁

bufio.Scanner의 기본 버퍼는 64KB입니다. 긴 줄이 있으면 scanner.Buffer()로 크기를 늘리세요.

주의할 점

Scanner.Err()를 확인하지 않으면 버퍼 초과 등의 에러를 놓칩니다. 루프 후 반드시 에러를 검사하세요.

자주 묻는 질문

bufio 스트리밍란 무엇인가요?

bufio 로 대용량 파일을 라인 단위로 효율적으로 읽습니다. 메모리를 절약하는 스트리밍 처리입니다.

bufio 스트리밍 학습 시 주의할 점은 무엇인가요?

Scanner.Err() 를 확인하지 않으면 버퍼 초과 등의 에러를 놓칩니다. 루프 후 반드시 에러를 검사하세요.