为了账号安全,请及时绑定邮箱和手机立即绑定

阅读 io。大小未知的读取器在 golang 中将字节数组

阅读 io。大小未知的读取器在 golang 中将字节数组

Go
qq_遁去的一_1 2022-08-15 19:44:45
我有一个文件(假设描述符被命名为)通过该方法打开,所以我想将其内容读入字节数组中。fileos.Open()我假设方法是创建以后的data := make([]byte, 10000000)然后将内容读入其中n, err := file.Read(data)我的问题是,是否有一种更优雅/更习惯的方式来解决这个问题,因为通过事先不知道文件大小,我只是传递一个我估计在初始化bytes数组时会做的数字()。10000000
查看完整描述

2 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

您可以使用(最高可达 Go 1.15)或(Go 1.16 及更高版本)软件包。有一个帮助器函数,可将整个文件读入字节切片。io/ioutilos


// For Go 1.15 and lower:

package main


import "io/ioutil"


func main() {

    data, err := ioutil.ReadFile("path/to/my/file")

}

// For Go 1.16 and higher:

package main


import "os"


func main() {

    data, err := os.ReadFile("path/to/my/file")

}

在 Go 版本 1.16 中,由于兼容性原因,该函数仍然存在,但它已在 中复制。我假设只要Go有1.xx版本,它就会一直存在,因为兼容性承诺,所以你可以继续使用那个。io/ioutilosio/ioutil


如果您有文件描述符或任何文件描述符,您也可以使用该软件包:io.Readerio/ioutil


package main


import (

    "io/ioutil"

    "os"

)


func main() {

    f, _ := os.Open("path/to/my/file")

    data, err := ioutil.ReadAll(f)

}


查看完整回答
反对 回复 2022-08-15
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

是 的包装器,它使用预定大小“512”字节,随着读取循环而扩大ioutil.ReadAll()io.ReadAll()

您可以改用 中的大小。(*file.File).Stats().Size()

一种更直接的方法是使用自动将文件转换为[]字节的方法。在将文件读入字节之前,它使用上述方法的大小创建 []字节。os.ReadFile()Stats().Size()


查看完整回答
反对 回复 2022-08-15
  • 2 回答
  • 0 关注
  • 116 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信