Go 哪个接口确保读取固定数量的字节,除非达到EOF?

Go 哪个接口确保读取固定数量的字节,除非达到EOF?,go,Go,根据io.Reader的文档,它说 type Reader interface { Read(p []byte) (n int, err error) } ... Read reads up to len(p) bytes into p. It returns the number of bytes read (0 <= n <= len(p)) and any error encountered. 类型读取器接口{ 读取(p[]字节)(n int,err error)

根据io.Reader的文档,它说

type Reader interface {
    Read(p []byte) (n int, err error)
}

...

Read reads up to len(p) bytes into p. It returns the number of bytes read (0 <= n <= len(p)) and any error encountered.
类型读取器接口{
读取(p[]字节)(n int,err error)
}
...

Read最多可将len(p)字节读入p。它返回读取的字节数(0该契约规定
read
最多将
len(p)
字节读入缓冲区

如果它可以读取所有
len(p)
字节,那么
n=len(p)

如果读取的数据较少(因为到达文件末尾,或者因为底层实现只返回缓冲数据),则
n
将较少。它可以是0


Read
是那些即使err!=nil也会返回有意义结果的函数之一。如果由于到达文件末尾而停止读取,它可能会返回读取的字节数和io。EOF。

n
指的是第一个返回值。它是读取的字节数。Read可以返回
n
的正值和非零错误。使用Io、 ReadFull以填充缓冲区。go中是否有方法确保在达到EOF之前读取n个字节?是的。使缓冲区的长度
n
。通常在go中,当执行诸如
io.Copy
之类的操作时,会创建大小为-32K的隐式缓冲区。读取操作将一次读取这么多字节,与写入操作类似。io.Reader接口利用这些缓冲区来避免直接从数据源读取每个字节的开销。因此,在大拷贝过程中,
n
每次读取将为32K,但最终读取除外-当遇到io.EOF时-然后
n
将为@user1424739用于读取len(buf)字节,除非达到EOF或其他错误。