Bufio パッケージの詳細#
bufio
パッケージは、Go の標準ライブラリの 1 つで、バッファ付きの I/O 操作を提供し、I/O の効率を向上させます。このパッケージは io.Reader
と io.Writer
をカプセル化し、バッファ機能を提供することで、システムコールの回数を減らし、読み書きのパフォーマンスを向上させます。
以下は bufio
パッケージの詳細な説明といくつかの例です:
-
バッファ付きリーダー(
Scanner
)の作成:NewScanner()
関数は、指定されたio.Reader
からデータを読み取るバッファ付きリーダーを作成するために使用されます。Scanner
型は、行ごとまたは単語ごとにデータを読み取るための便利なメソッドを提供します。- 例:
file, _ := os.Open("data.txt") scanner := bufio.NewScanner(file) for scanner.Scan() { line := scanner.Text() fmt.Println(line) } if err := scanner.Err(); err != nil { fmt.Println("Error:", err) }
-
バッファ付きライター(
Writer
)の作成:NewWriter()
関数は、指定されたio.Writer
にデータを書き込むバッファ付きライターを作成するために使用されます。Writer
型は、データをバッファに書き込み、バッファがいっぱいになったり明示的にフラッシュされたりしたときにデータを基になるio.Writer
に書き込むためのWrite()
メソッドを提供します。- 例:
file, _ := os.Create("output.txt") writer := bufio.NewWriter(file) text := "Hello, World!" writer.WriteString(text) writer.Flush() // バッファをフラッシュして、すべてのデータが基になるファイルに書き込まれることを確認する file.Close()
-
バッファ付きリーダー(
Reader
)の作成:NewReader()
関数は、指定されたio.Reader
からデータを読み取り、バッファ機構を提供するバッファ付きリーダーを作成するために使用されます。Reader
型は、バッファからデータを読み取り、バッファが空の場合にバッファを埋めるためのRead()
メソッドを提供します。- 例:
data := []byte("Hello, World!") reader := bufio.NewReader(bytes.NewReader(data)) buffer := make([]byte, 5) for { n, err := reader.Read(buffer) if err != nil && err != io.EOF { fmt.Println("Error:", err) break } if n == 0 { break } fmt.Println(string(buffer[:n])) }
bufio
パッケージには、ReadString()
、WriteString()
、Scanner
のデリミタの設定、より高度なバッファ付きライターなど、他のいくつかの関数や型も提供されています。これらの機能は、より効率的な I/O 操作を行うのに役立ちます。
注意:バッファ付きリーダーやバッファ付きライターを使用した後は、必ず Scanner
、Writer
、または Reader
の Flush()
メソッドを呼び出して、すべてのデータが書き込まれたり読み取られたりすることを確認してください。
これは bufio
パッケージの概要と例です。bufio
パッケージを使用すると、I/O 操作の効率が向上し、入出力の処理が簡素化されます。さらなる質問がある場合は、お気軽にお尋ねください。