Golang程序 将文件转换为字节数组
在Go编程语言中,我们可以使用byte函数和ioutil.ReadFile函数来将文件转换成字节数组。os包文件类型提供了打开、读取、写入和操作文件的方法,而数组是一组固定大小的相同元素,可以通过它们各自的索引进行访问,这些索引是以零为基础的整数。数组的大小在声明的时候就已经预先确定了,以后不能再改变。当存储一组已知元素数量的数据时,Go中的数组很方便,但它们也有一些缺点,比如在调整数组大小时需要更多的内存。
方法1:使用byte函数
这个方法用os包打开一个文件,用bufio包从文件中读取数据,然后用fmt包打印出字节数组。一开始是用OS打开文件。在打开函数后利用文件。用stat方法检索文件的大小。之后,利用文件,做一个与文件大小相同的字节片。使用读取技术将文件的内容读入字节片。字节片最后被打印出来。
语法
Bufio.newReader
这个函数属于Go的bufio包。这个函数的主要目标是以大块的方式读取数据,而不是逐行读取,并存储在缓冲区。io.reader和缓冲区的大小在这个函数中被作为参数传递。
算法
- 第1步 – 创建一个包main,并在程序中声明fmt(格式包)、bufio、io和os包,其中main产生可执行代码,fmt帮助格式化输入和输出。
-
第2步 – 利用os.Open函数来打开文件,并处理任何潜在的错误。
-
第 3步 – 在下一步使用Stat方法检索文件的元数据,然后将其保存到一个变量中。
-
第4步 – 按照元数据确定的文件大小做一个字节片。
-
第 5步 – 然后,为了将文件读入字节片,使用一个Bufio阅读器。
-
第6步 – 在将文件读入字节片的同时,寻找任何错误并加以处理。
-
第7步 – 文件的内容现在出现在字节片中,可以根据需要使用。
-
步骤8 – Ioutil也可以用来完成第3步到第6步。
-
第9步 – 当使用ReadFile方法时,整个文件被读入一个字节片,然后连同可能发生的错误一起返回。
例子
在这个例子中,我们将使用byte函数将文件转换为字节数组。
package main
import (
"bufio"
"fmt"
"io"
"os"
)
func main() {
file, err := os.Open("filename.txt")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
// Get the file size
stat, err := file.Stat()
if err != nil {
fmt.Println(err)
return
}
// Read the file into a byte slice
bs := make([]byte, stat.Size())
_, err = bufio.NewReader(file).Read(bs)
if err != nil && err != io.EOF {
fmt.Println(err)
return
}
fmt.Println(bs)
}
输出
[72 101 108 108 111 32 87 111 114 108 100 33]
方法2:使用ioutil.ReadFile函数
在下面这个方法中,使用ioutil包将文件的全部内容读入一个字节片。ioutil.ReadFile函数将完整的文件内容读入内存后返回一个字节片。如果读取文件有问题,应用程序将输出一个错误信息。文件的内容,以字节片的形式显示为一个字节数组,然后由应用程序打印。让我们看一下代码和算法,看看这个方法是如何执行的。
语法
Ioutil.ReadFile
这个函数在ioutil包中可用,用于读取文件的内容,文件名是函数的输入。
算法
- 第1步 – 创建一个包main,并在程序中声明fmt(format包,io/ioutil包,其中main产生可执行代码,fmt帮助格式化输入和输出。
-
第2步 – 使用ioutil.ReadFile函数将整个文件的内容读成一个字节的片断。
-
第 3步 – 在读取文件时检查是否有错误。
-
第 4步– 打印文件的内容,它在字节片中被表示为一个字节数组。
-
第 5步 – 由于使用了ioutil,这个程序比前一个程序更短、更简单。
-
第6步 – 使用ReadFile函数快速将文件的全部内容读入内存。
例子
在这个例子中,我们用ioutil.ReadFile函数将文件转换为字节数组。让我们看一下代码。
package main
import (
"fmt"
"io/ioutil"
)
func main() {
v, err := ioutil.ReadFile("myfile.txt") //read the content of file
if err != nil {
fmt.Println(err)
return
}
fmt.Println(v) //print the file content
}
输出
[72 101 108 108 111 32 87 111 114 108 100 33]
总结
我们用两个例子执行了将文件转换为字节数组的程序。在第一个例子中,我们使用了byte函数,在第二个例子中,我们使用了ioutil.ReadFile函数来执行该程序。