[英]Reading an io.Reader of unknown size into bytes array in golang
我有一個通過os.Open()
方法打開的文件(比如描述符名為file
),所以我想將其內容讀入字節數組。
我認為這種方法是創建后者
data := make([]byte, 10000000)
然后將內容讀入其中
n, err := file.Read(data)
我的問題是是否有更優雅/慣用的方式來解決這個問題,因為事先不知道文件大小,我只是傳遞了一個我估計在初始化字節數組時會做的數字( 10000000
)。
您可以使用io/ioutil
package,它有一個助手 function 可以將整個文件讀入字節片。
package main
import "io/ioutil"
func main() {
data, err := ioutil.ReadFile("path/to/my/file")
}
如果您有文件描述符或任何io.Reader
,您也可以使用io/ioutil
package:
package main
import (
"io/ioutil"
"os"
)
func main() {
f, _ := os.Open("path/to/my/file")
data, err := ioutil.ReadAll(f)
}
ioutil.ReadAll()
是io.ReadAll()
() 的包裝器,它使用預定大小的“512”字節,隨着讀取循環而擴大。
您可以改為使用(*file.File).Stats().Size()
的大小。
更直接的方法是使用os.ReadFile()
自動將文件轉換為 []byte 為您。 在將文件讀入字節之前,它會使用上面的Stats().Size()
方法創建具有大小的 []byte。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.