Bufio 包詳解#
bufio
包是 Go 標準庫中的一個包,提供了帶緩衝的 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("錯誤:", err) }
-
創建緩衝寫入器(
Writer
):NewWriter()
函數用於創建一個緩衝寫入器,它將數據寫入指定的io.Writer
。Writer
類型提供了Write()
方法,用於將數據寫入緩衝區,並在緩衝區滿或顯式刷新時將數據寫入底層的io.Writer
。- 示例:
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("錯誤:", 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 操作的效率,並簡化對輸入輸出的處理。如有任何進一步的疑問,請隨時提問。