在go语言中,有没有一种方法可以将[]byte切片转换为io.Reader?

3


我刚开始学习Go语言,想知道是否可以将[]byte切片转换为io.Reader。像ioutil.ReadAll一样,反过来是可以的。
如果不行,是否可以通过code.google.com/p/go.net/html.Tokenizer和字节切片进行某种形式的处理?

2个回答

12

是的:bytes.NewBuffer

io.Reader 示例:

http://play.golang.org/p/P0VbE8UFpC

package main

import (
    "bytes"
    "encoding/base64"
    "io"
    "os"
)

func main() {
    // A Buffer can turn a string or a []byte into an io.Reader.
    buf := bytes.NewBuffer([]byte("R29waGVycyBydWxlIQ=="))
    dec := base64.NewDecoder(base64.StdEncoding, buf)
    io.Copy(os.Stdout, dec)
}

2
bytes.NewReader有什么区别? - Fred Hors
2
@FredHors 我知道已经过了一段时间,但我也很好奇,所以我查看了源代码。从源代码的评论中获取 // Unlike a Buffer, a Reader is read-only and supports seeking.。我想问题应该是“你的使用场景是什么?” - Matt Oestreich

8

1
bytes.NewBuffer 有什么不同? - Fred Hors
1
我知道已经有一段时间了,但我也对此很好奇,所以我查看了源代码。来自源代码的注释(https://github.com/golang/go/blob/master/src/bytes/reader.go#L16):与缓冲区不同,Reader是只读的并支持寻找。我想问题应该是“你的用例是什么?” - Matt Oestreich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接