gpt4 book ai didi

go - 如何初始化 byte slice 以便将4096个字节写入os.File

转载 作者:行者123 更新时间:2023-12-01 22:39:18 27 4
gpt4 key购买 nike

我正在尝试将4096个字节写入os.File,但是它写入了所有容量-您能帮助我理解为什么 slice lenbytes的长度大于4096吗?

    // ...
tempStdin, err := ioutil.TempFile(".", "stdin.txt")
bytesToBuffer := make([]byte, 4096-1)
buf := bytes.NewBuffer(bytesToBuffer)
buf.WriteByte(byte(10))
pad(1, buf)
lenbytes := buf.Bytes() // len(lenbytes) is 8191
if _, err := tempStdin.Write(lenbytes); err != nil {
panic(err)
}
}


func pad(siz int, buf *bytes.Buffer) {
pu := make([]byte, 4096-siz)
for i := 0; i < 4096-siz; i++ {
pu[i] = 97
}
buf.Write(pu)
}

最佳答案

因为此表达式bytesToBuffer := make([]byte, 4096-1)正在将length and capacity都设置为bytesToBuffer来初始化4095
从内置的 make 文档中:

slice :大小指定长度。 slice 的容量为
等于它的长度。可以提供第二个整数参数
指定不同的容量; [...]

然后buf WriteByte Write 都在后附加

写将p的内容附加到缓冲区

因此,您最终得到一个 slice ,其总长度为:
4095(来自make)+1(来自buf.WriteByte(byte(10)) + 4095(来自buf.Write(pu))= 8191。

改为使用bytesToBuffer初始化make([]byte, 0, 4096-1)。您可以在此Go Play上看到它。

关于go - 如何初始化 byte slice 以便将4096个字节写入os.File,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63094364/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com