我可以使用io.WriteString輕鬆地將字符串寫入連接。使用Go讀取來自連接的utf8編碼數據使用Go
但是,我似乎很容易從讀取一個字符串從一個連接。我可以從連接中讀取的唯一東西是字節,看起來,我必須以某種方式將其轉換爲字符串。
假設字節代表一個utf8編碼的字符串,我將如何將它們轉換爲字符串形式?
(編輯:另外,我怎麼能簡單地讀取來自一個連接字符串)
謝謝!
我可以使用io.WriteString輕鬆地將字符串寫入連接。使用Go讀取來自連接的utf8編碼數據使用Go
但是,我似乎很容易從讀取一個字符串從一個連接。我可以從連接中讀取的唯一東西是字節,看起來,我必須以某種方式將其轉換爲字符串。
假設字節代表一個utf8編碼的字符串,我將如何將它們轉換爲字符串形式?
(編輯:另外,我怎麼能簡單地讀取來自一個連接字符串)
謝謝!
您可以只投字節的片分爲字符串:
var foo []byte
var bar string = string(foo)
沒有編碼/解碼參與,因爲字符串只是視爲字節數組。
一個適合您目的的便利工具可以在標準庫中找到:bytes.Buffer
(see the package docs)。
假設你有一個實現io.Reader
的對象(也就是說,它有一個簽名爲Read([]byte) (int, os.Error)
的方法)。
一個常見的例子是一個os.File
:
f, err := os.Open("/etc/passwd", os.O_RDONLY, 0644)
如果你想讀該文件的內容轉換爲字符串,只需創建一個bytes.Buffer
(其零值是一個隨時可以使用的緩衝,所以你不需要調用構造函數):
var b bytes.Buffer
使用io.Copy
該文件的內容複製到緩衝區:
n, err := io.Copy(b, f)
(使用io.Copy
另一種方法是b.ReadFrom(f)
- 他們或多或少相同。)
,並調用緩衝區的字符串方法來檢索緩衝區的內容作爲一個字符串:
s := b.String()
的bytes.Buffer
將自動增長以存儲文件的內容,因此您不必擔心分配和增長byte
切片等。
這並非100%真實,儘管足夠接近。字符串的處理方式與字節數組不同。 – cthom06 2010-08-01 23:11:46
只是好奇,如何檢查到達字符串的末尾(或字符結束)?或者我可以通過char(使用強制轉換)從連接中構建字符串來讀取char? – helios 2010-08-24 07:51:21