bufioioreader writer 의 버퍼링을 지원하는 래핑하는 타입 입니다.

기본적으로 os 패키지의 파일 입출력은 버퍼가 없는 저수준 입출력 입니다. 이는 큰 용량의 파일을 처리할 때 큰 부하를 일으킵니다.

bufio 를 사용하면 버퍼를 활용해 하드웨어 부담을 줄일 수 있습니다.

func main() {
	veryBigFile, _ := os.Open("test")
	bufedReader := bufio.NewReader(veryBigFile)

	d := make([]byte, 2048)

	bufedReader.Read(d)
}

bufio 의 기본 버퍼 사이즈는 4096byte 입니다.

const (
	defaultBufSize = 4096
)

만약 버퍼 사이즈를 직접 지정하려면 다음처럼 하면 됩니다.

bufedReader := bufio.NewReaderSize(veryBigFile, 256)

bufio.Reader

테스트 데이터

bufed Reader 는 다음 함수로 생성 합니다.

bufedReader := bufio.NewReader(veryBigFile)

// 버퍼 사이즈 지정
bufedReader := bufio.NewReaderSize(veryBigFile, 256)

기본적인 Reader 구현 함수는 아래를 참고해 주세요

Go - Reader
Reader * strings * bytes 위 패키지는 string byte 데이터를 처리 하기 위한 패키지 입니다. 원할 한 데이터 처리를 위해 각 패키지는 Reader Buffer 를 제공 합니다. bytes.Reader 와 strings.Reader 는 byte/string 데이터를 io.Reader 입력을 받는 함수에게 데이터를 전달할때 사용합니다. 본 포스트는 bytes/strings 의 io 패키지의 인터페이스 구현체 함수들을 보지만, 많은 패키지들이 io 의 인터페이스를 많이사용하므로, 참고하길 바랍니다…

func (b *Reader) Buffered() int

버퍼의 저장된 데이터 사이즈를 리턴 합니다.

func main() {
	veryBigFile, _ := os.Open("test")
	bufedReader := bufio.NewReaderSize(veryBigFile, 256)
    
	d := make([]byte, 16)
	bufedReader.Read(d)
    
	fmt.Printf("%s\n", d)
	println(bufedReader.Buffered())
}
hello how are yo
240

func (b *Reader) Discard(n int) (discarded int, err error)

입력받은 길이만큼 버퍼의 데이터를 생략 하고 생략한 길이를 리턴 합니다.

func main() {
	veryBigFile, _ := os.Open("test")
	bufedReader := bufio.NewReaderSize(veryBigFile, 256)
	d := make([]byte, 8)
	bufedReader.Read(d)
	fmt.Printf("%s\n", d)
	bufedReader.Discard(2)
	bufedReader.Read(d)
	fmt.Printf("%s\n", d)
}
hello ho
are you

func (b *Reader) Peek(n int) ([]byte, error)

offset 과 원본 Reader 의 변화 없이 버퍼의 값을 입력 받은 크기 만큼 읽어옵니다.

func main() {
	veryBigFile, _ := os.Open("test")
	bufedReader := bufio.NewReaderSize(veryBigFile, 256)
	d := make([]byte, 8)

	peeked, _ := bufedReader.Peek(8)
	fmt.Printf("%s\n", peeked)

	bufedReader.Read(d)
	fmt.Printf("%s\n", d)
}
hello ho
hello ho

func (b *Reader) Read(p []byte) (n int, err error)

입력받은  bb 사이즈 만큼 버퍼를 읽습니다.

func (b *Reader) ReadBytes(delim byte) ([]byte, error)

버퍼를 읽어서 처음부터 delim 문자까지 읽어 리턴 합니다.

func main() {
	veryBigFile, _ := os.Open("test")
	bufedReader := bufio.NewReaderSize(veryBigFile, 256)

	d, _ := bufedReader.ReadBytes(byte('o'))

	fmt.Printf("%s\n", d)
}
hello

func (b *Reader) ReadString(delim byte) (string, error)

버퍼를 읽어서 처음부터 delim 문자까지 읽어 리턴 합니다. string 타입으로 리턴 합니다.

func (b *Reader) ReadLine() (line []byte, isPrefix bool, err error)

버퍼를 \n 또는 \r\n 까지 읽습니다. 리턴된 값에는 개행 문자가 포함되지 않습니다. 리턴된 line 이 개행문자까지 읽지 못했을 경우, isPrefixtrue 로 리턴 됩니다.

func (b *Reader) Size() int

버퍼 사이즈를 리턴 합니다.

func (*Reader) Reset

입혁한 Reader 로 버퍼를 초기화 합니다.

bufio.Writer

Writer 는 아래처럼 생성 합니다.

bufedWriter := bufio.NewWriter(f)

// 버퍼 사이즈 지정
bufedWriter := bufio.NewWriterSize(f, 256)

func (b *Writer) Available() int

남은 버퍼의 크기를 리턴합니다.

func (b *Writer) Buffered() int

버퍼에 저장된 데이터 크기를 리턴합니다.

func (b *Writer) Flush() error

버퍼의 모든 데이터를 원본 Writer 에 전송하고 버퍼를 비웁니다.

func (b *Writer) ReadFrom(r io.Reader) (n int64, err error)

입력 받은 Reader 의 값을 읽어, 버퍼에 저장합니다.

func (b *Writer) Reset(w io.Writer)

버퍼의 Writer 를 입력받은 값으로 리셋합니다.

func (b *Writer) Size() int

버퍼 사이즈를 리턴합니다.

func (b *Writer) Write(p []byte) (nn int, err error)

버퍼에 입력받은 값을 작성합니다.

func main() {
	f, _ := os.Create("test")

	bufedWriter := bufio.NewWriter(f)

	bufedWriter.Write([]byte("hi hello"))
	bufedWriter.Flush()
}

test 파일

hi hello

func (b *Writer) WriteByte(c byte) error

입력받은 바이트를 버퍼에 작성합니다.

func (b *Writer) WriteRune(r rune) (size int, err error)

입력받은 rune 을 버퍼에 작성합니다.

func (b *Writer) WriteString(s string) (int, error)

입력받은 문자열을 버퍼에 작성합니다.