You can use bufio.NewReaderSize
and bufio.NewWriterSize
together in Go to efficiently read and write to a buffered reader and writer with a specific buffer size.
Here is an example of how you can use them together:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
// Open a file for reading
file, err := os.Open("input.txt")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer file.Close()
// Create a buffered reader with a buffer size of 4096
reader := bufio.NewReaderSize(file, 4096)
// Create a buffered writer with a buffer size of 4096
writer := bufio.NewWriterSize(os.Stdout, 4096)
// Read from the buffered reader
for {
// Read a line from the input file
line, err := reader.ReadString('\n')
if err != nil {
break
}
// Write the line to the buffered writer
_, err = writer.WriteString(line)
if err != nil {
fmt.Println("Error writing line:", err)
break
}
}
// Flush the remaining data from the buffered writer
err = writer.Flush()
if err != nil {
fmt.Println("Error flushing writer:", err)
}
}
In this example, we open a file for reading and create a buffered reader with a buffer size of 4096 bytes using bufio.NewReaderSize
. We also create a buffered writer with a buffer size of 4096 bytes using bufio.NewWriterSize
, which writes to the standard output (os.Stdout
).
We then read from the buffered reader using the ReadString
function to read lines from the file, and write each line to the buffered writer using the WriteString
function. Finally, we flush the remaining data from the buffered writer using the Flush
method.
You can modify this example to suit your specific needs, such as reading from a different source or writing to a different destination.