Go语言程序:将文件转换为字节数组


在 Go 编程语言中,我们可以使用 `byte` 函数和 `ioutil.ReadFile` 函数将文件转换为字节数组。`os` 包中的文件类型提供了打开、读取、写入和操作文件的方法,而数组是由相同元素组成的固定大小的组,可以通过其各自的索引(基于零的整数)进行访问。数组的大小在声明时预先确定,以后无法更改。当存储一组具有已知元素数量的数据时,Go 中的数组非常方便,但它也有一些缺点,例如在调整数组大小时需要更多内存。

方法一:使用 `byte` 函数

此方法使用 `os` 包打开文件,使用 `bufio` 包从文件读取数据,然后使用 `fmt` 包打印字节数组。首先使用 `os` 打开文件。在 `open` 函数之后使用该文件。使用 `stat` 方法获取文件大小。之后,它使用该文件并创建一个与文件大小相同的字节切片。使用 `read` 方法将文件内容读取到字节切片中。最后打印出字节切片。

语法

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]

方法二:使用 `ioutil.ReadFile` 函数

在下面的方法中,使用 `ioutil` 包将文件的完整内容读取到字节切片中。`ioutil.ReadFile` 函数在将整个文件的内容读取到内存后返回一个字节切片。如果读取文件时出现问题,应用程序将输出错误消息。然后,应用程序打印文件的内容,该内容以字节切片的形式显示为字节数组。让我们看一下代码和算法,看看如何执行此方法。

语法

Ioutil.ReadFile

此函数在 `ioutil` 包中可用,用于读取以文件名作为函数输入的文件的内容。

算法

  • 步骤 1 − 创建一个 `main` 包,并在程序中声明 `fmt`(格式化包)、`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` 函数来执行程序。

更新于:2023年2月21日

14K+ 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告