Функция bufio.NewReadWriter

Функция bufio.NewReadWriter создает новый объект типа *bufio.ReadWriter, который объединяет в себе буферизированный ридер и буферизированный райтер. Это позволяет выполнять как чтение, так и запись с использованием буферизации через единый интерфейс. Первым параметром функция принимает объект *bufio.Reader, вторым параметром - объект *bufio.Writer.

Синтаксис

gobufio.NewReadWriter(r *bufio.Reader, w *bufio.Writer) *bufio.ReadWriter

Пример

Давайте создадим буферизированный объект для чтения и записи в файл:

gopackage 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")
}

Результат выполнения кода:

go"Data written successfully"

Пример

Давайте используем bufio.NewReadWriter для чтения данных после записи:

gopackage 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)
}

Результат выполнения кода:

go"Hello, Go!"

Пример

Давайте создадим буферизированный объект для работы с вводом-выводом через стандартные потоки:

gopackage 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" результат выполнения кода:

go"Enter your name: "
"Hello, Alice!"

Смотрите также

  • функцию bufio.NewReader,
    которая создает новый буферизированный ридер
  • функцию bufio.NewWriter,
    которая создает новый буферизированный райтер
  • функцию bufio.ReadWriter,
    которая представляет структуру для буферизированного чтения и записи
  • функцию bufio.Writer.Flush,
    которая сбрасывает буфер записи в основной поток