Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当缓冲区较大时,Golang Bufio writer.Flush()不会写入小数据_Go - Fatal编程技术网

当缓冲区较大时,Golang Bufio writer.Flush()不会写入小数据

当缓冲区较大时,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,

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,
        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与底层文件无关。如果你想确保数据被写入存储器,你需要放下并移除加倍的缓冲区。即使使用字节缓冲区,我也有同样的问题。请看:工作得很有魅力。非常感谢你!