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+ 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.