我可以使用io.WriteString轻松地将字符串写入连接。
但是,我似乎无法轻易地从连接中读取字符串。我可以从连接中读取的唯一内容是字节,看起来,我必须以某种方式转换为字符串。
假设字节代表utf8编码的字符串,我该如何将它们转换为字符串形式?
(编辑:或者,我怎么能简单地从连接中读取一个字符串?)
谢谢!
答案 0 :(得分:4)
可以在标准库中找到适合您目的的便捷工具: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)
- 它们或多或少相同。)
并调用缓冲区的String方法以字符串形式检索缓冲区的内容:
s := b.String()
bytes.Buffer
将自动增长以存储文件内容,因此您无需担心分配和增加byte
切片等。
答案 1 :(得分:2)
您只需将一片字节转换为字符串:
var foo []byte
var bar string = string(foo)
不涉及编码/解码,因为字符串只被视为字节数组。