当缓冲区较大时,Golang Bufio writer.Flush()不会写入小数据
Golang Bufio writer.Flush在大缓冲区大小时不写入小数据示例4096标准大小*2当缓冲区较大时,Golang Bufio writer.Flush()不会写入小数据,go,Go,Golang Bufio writer.Flush在大缓冲区大小时不写入小数据示例4096标准大小*2 package main import ( "log" "os" "bufio" ) func main() { file, err := os.Create("test") defer file.Close() w := bufio.NewWriter(file) w = bufio.NewWriterSize( w,
package main
import (
"log"
"os"
"bufio"
)
func main() {
file, err := os.Create("test")
defer file.Close()
w := bufio.NewWriter(file)
w = bufio.NewWriterSize(
w,
4096*2,
)
bytesAvailable := w.Available()
log.Printf("Available %v\n", bytesAvailable)
bw, _ := w.Write(
[]byte("A"),
)
log.Printf("written bytes: %v\n", bw)
bytesAvailable = w.Available()
log.Printf("Available: %v\n", bytesAvailable)
buf := w.Buffered()
log.Printf("buffered: %d\n", buf)
err = w.Flush()
if err != nil {
log.Fatal(err)
}
}
当我使用标准大小或写入更多数据时,它会按预期工作。我认为您缺少对文件指针的同步调用,因此文件不会写入文件系统;Flush只会将缓冲区传递给文件编写器,但随后需要将文件推送到磁盘
w := bufio.NewWriterSize(
file,
4096*2,
)
请参阅和问题在于应用程序有两层bufio写入程序:
w := bufio.NewWriter(file)
w = bufio.NewWriterSize(
w,
4096*2,
)
一个是布菲奥,一个是作家。应用程序刷新外部bufio.Writer,但没有刷新内部bufio.Writer的代码。将代码更改为使用单个bufio.Writer,程序将按预期工作
w := bufio.NewWriterSize(
file,
4096*2,
)
你期望看到什么,以及会发生什么?在本例中,刷新后不检查缓冲数据。这与预期相符:输出:2017/12/18 16:37:39可用8192 2017/12/18 16:37:39写入字节:1 2017/12/18 16:37:39可用:8191 2017/12/18 16:37:39缓冲:1$ls-l-rw-rw-r-1 stingo stingo 0 dic 18 16:37测试我不确定从该评论中得出什么,请在您的问题中格式化。抱歉,我添加了更多数据。文件已创建,但未向其中添加任何内容。我认为Flush应该写A。谢谢。不,Flush与底层文件无关。如果你想确保数据被写入存储器,你需要放下并移除加倍的缓冲区。即使使用字节缓冲区,我也有同样的问题。请看:工作得很有魅力。非常感谢你!