Golang io.ReadAtLeast() 函数及其示例

Golang io.ReadAtLeast() 函数及其示例

Go 语言中,io 包提供了基本的 I/O 原语接口,其主要工作是封装这些原语的正在执行的实现。Go 语言中的 ReadAtLeast() 函数用于从指定的读取器“r”中读取数据,以至少读取指定的最小字节数到指定的缓冲区“buf”中。此外,该函数是在 io 包下定义的。在这里,您需要导入“io”包以便使用这些函数。

语法:

func ReadAtLeast(r Reader, buf []byte, min int) (n int, err error)

在这里,“r”是指定的读取器,“buf”是指定的缓冲区,“min”是读取器读入给定的缓冲区中的最小字节数。

返回值: 它返回指定的缓冲区复制的字节数,并在读取的字节数小于最小字节数时返回错误。在这里,当且仅当错误为 nil 时,“n”返回值将大于“min”字节。但是,如果没有读取任何字节,则返回的错误为“EOF”。

注意: 如果在读取的字节数少于指定的“min”字节数后发生 EOF,则该方法返回 ErrUnexpectedEOF 错误。但是,如果指定的最小字节数大于指定的缓冲区长度,则此方法将返回 ErrShortBuffer 错误。但是,如果指定的读取器在至少读取指定的最小字节数后返回错误,则拒绝该错误。

示例1:

// 演示在Golang 中使用 io.ReadAtLeast() 函数
  
// 引入主包
package main
  
// 引入 fmt、io 和 strings
import (
    "fmt"
    "io"
    "strings"
)
  
// 主函数
func main() {
  
    // 使用 NewReader 方法定义读取器
    reader := strings.NewReader("Geeks")
  
    // 使用 make 关键字定义指定长度的缓冲区
    buffer := make([]byte, 6)
  
    // 使用其参数调用 ReadAtLeast 方法
    n, err := io.ReadAtLeast(reader, buffer, 3)
  
    // 如果错误不为空,则抛出异常
    if err != nil {
        panic(err)
    }
  
    // 输出结果
    fmt.Printf("缓冲区中的字节数: %d\n", n)
    fmt.Printf("缓冲区的内容: %s\n", buffer)
} 

输出:

缓冲区中的字节数:5
缓冲区的内容:Geeks

在这里,返回的‘n’是5,大于“min”的3,因为没有错误。

示例2:

// 演示在Golang 中使用 io.ReadAtLeast() 函数
  
// 引入主包
package main
  
// 引入 fmt、io 和 strings
import (
    "fmt"
    "io"
    "strings"
)
  
// 主函数
func main() {
  
    // 使用 NewReader 方法定义读取器
    reader := strings.NewReader("GeeksforGeeks")
  
    // 使用 make 关键字定义指定长度的缓冲区
    buffer := make([]byte, 4)
  
    // 使用其参数调用 ReadAtLeast 方法
    n, err := io.ReadAtLeast(reader, buffer, 5)
  
    // 如果错误不为空,则抛出异常
    if err != nil {
        panic(err)
    }
  
    // 输出结果
    fmt.Printf("缓冲区中的字节数: %d\n", n)
    fmt.Printf("缓冲区的内容: %s\n", buffer)
} 

输出:

panic: short buffer

goroutine 1 [running]:
main.main()
    /tmp/sandbox041442440/prog.go:29 +0x20f

在这里,上面代码中指定的缓冲区的长度小于指定的“min”字节数,所以会产生一个错误。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程