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 操作の効率が向上し、入出力の処理が簡素化されます。さらなる質問がある場合は、お気軽にお尋ねください。