Функция bufio.NewReadWriter
Функция bufio.NewReadWriter создает новый объект типа *bufio.ReadWriter, который объединяет в себе буферизированный ридер и буферизированный райтер. Это позволяет выполнять как чтение, так и запись с использованием буферизации через единый интерфейс. Первым параметром функция принимает объект *bufio.Reader, вторым параметром - объект *bufio.Writer.
Синтаксис
bufio.NewReadWriter(r *bufio.Reader, w *bufio.Writer) *bufio.ReadWriter
Пример
Давайте создадим буферизированный объект для чтения и записи в файл:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
file, err := os.Create("example.txt")
if err != nil {
fmt.Println("Error creating file:", err)
return
}
defer file.Close()
reader := bufio.NewReader(file)
writer := bufio.NewWriter(file)
rw := bufio.NewReadWriter(reader, writer)
_, err = rw.WriteString("Hello, World!")
if err != nil {
fmt.Println("Error writing:", err)
return
}
err = rw.Flush()
if err != nil {
fmt.Println("Error flushing:", err)
return
}
fmt.Println("Data written successfully")
}
Результат выполнения кода:
"Data written successfully"
Пример
Давайте используем bufio.NewReadWriter для чтения данных после записи:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
file, err := os.Create("data.txt")
if err != nil {
fmt.Println("Error creating file:", err)
return
}
defer file.Close()
reader := bufio.NewReader(file)
writer := bufio.NewWriter(file)
rw := bufio.NewReadWriter(reader, writer)
_, err = rw.WriteString("Hello, Go!")
if err != nil {
fmt.Println("Error writing:", err)
return
}
err = rw.Flush()
if err != nil {
fmt.Println("Error flushing:", err)
return
}
file.Seek(0, 0)
data, err := rw.ReadString('\n')
if err != nil {
fmt.Println("Error reading:", err)
return
}
fmt.Println(data)
}
Результат выполнения кода:
"Hello, Go!"
Пример
Давайте создадим буферизированный объект для работы с вводом-выводом через стандартные потоки:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
rw := bufio.NewReadWriter(reader, writer)
fmt.Print("Enter your name: ")
name, err := rw.ReadString('\n')
if err != nil {
fmt.Println("Error reading:", err)
return
}
name = name[:len(name)-1]
_, err = rw.WriteString("Hello, " + name + "!\n")
if err != nil {
fmt.Println("Error writing:", err)
return
}
err = rw.Flush()
if err != nil {
fmt.Println("Error flushing:", err)
return
}
}
При вводе "Alice" результат выполнения кода:
"Enter your name: "
"Hello, Alice!"
Смотрите также
-
функцию
bufio.NewReader,
которая создает новый буферизированный ридер -
функцию
bufio.NewWriter,
которая создает новый буферизированный райтер -
функцию
bufio.ReadWriter,
которая представляет структуру для буферизированного чтения и записи -
функцию
bufio.Writer.Flush,
которая сбрасывает буфер записи в основной поток