将二进制文件转换为字节数组

huangapple go评论157阅读模式
英文:

Convert binary File to array of bytes

问题

我想知道将二进制文件转换为[]byte的最佳方法是什么。

以下是一个示例代码,但它无法正常工作。我想知道我应该如何调整它以返回内容:

func ReadFileAndReturnByteArray(extractedFilePath string) ([]byte, error) {
    file, err := os.Open(extractedFilePath)
    if err != nil {
        return nil, err
    }
    defer file.Close()

    fileinfo, err := file.Stat()
    if err != nil {
        fmt.Println(err)
        return nil, err
    }

    filesize := fileinfo.Size()
    buffer := make([]byte, filesize)

    _, err = file.Read(buffer)
    if err != nil {
        fmt.Println(err)
        return  nil, err
    }
    return buffer, nil
}

请注意,这是一个用于将文件读取为[]byte的函数。它打开文件,获取文件信息,然后创建一个与文件大小相同的缓冲区。最后,它将文件内容读取到缓冲区中,并返回缓冲区作为[]byte类型的结果。

英文:

I'm wondering what is the best way to convert binary File to []byte

Here is a sample code that doesn't work. I'm wondering how I should adjust it to return the content as

func ReadFileAndReturnByteArray(extractedFilePath string) ([]byte, error) {
	file, err := os.Open(extractedFilePath)
	if err != nil {
		return nil, err
	}
	defer file.Close()

	fileinfo, err := file.Stat()
	if err != nil {
		fmt.Println(err)
		return nil, err
	}

	filesize := fileinfo.Size()
	buffer := make([]byte, filesize)

	_, err = file.Read(buffer)
	if err != nil {
		fmt.Println(err)
		return  nil, err
	}
	return buffer, nil
}

答案1

得分: 2

os包提供了一个ReadFile函数,它只适用于文件。它与你的ReadFileAndReturnByteArray函数具有完全相同的签名,可以直接替换。


io包提供了ReadAll函数,它适用于任何io.Reader

示例:

func ReadFileAndReturnByteArray(extractedFilePath string) ([]byte, error) {
    file, err := os.Open(extractedFilePath)
    if err != nil {
        return nil, err
    }
    defer file.Close()

    return io.ReadAll(file)
}
英文:

The os package provides a ReadFile function which only works for files. It has the exact same signature as your ReadFileAndReturnByteArray function and should be a drop-in replacement.


The io package provides the ReadAll function which works for any io.Reader.

Example:

func ReadFileAndReturnByteArray(extractedFilePath string) ([]byte, error) {
    file, err := os.Open(extractedFilePath)
    if err != nil {
        return nil, err
    }
    defer file.Close()

    return io.ReadAll()
}

huangapple
  • 本文由 发表于 2021年11月26日 01:14:22
  • 转载请务必保留本文链接:https://go.coder-hub.com/70115047.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定