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` 函式來執行程式。
資料結構
網路
關係資料庫管理系統(RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP