package mainimport ( "bytes" "encoding/base64" "fmt" "io" "log" "os")func b(name string) { f, err := os.Open(name) if err != nil { log.Fatal(err) } defer f.Close() buf := new(bytes.Buffer) binval := base64.NewEncoder(base64.StdEncoding, buf) if _, err := io.Copy(binval, f); err != nil { log.Fatal(err) } fmt.Printf("%s\n", buf.String()[buf.Len()-5:])}func main() { b("soccer.jpg") b("soccer2.jpg")}足球.jpg 足球 2.jpg输出:bodqhrohro@debian:/tmp$ go run base64.go nuNf/nuNf/第一个文件与第二个文件相同,只是删除了最后一个字节。它们产生相同的 base64 字符串。怎么了?我用go1.15.9和go1.18.3体验过。
1 回答
炎炎设计
TA贡献1808条经验 获得超4个赞
调用者必须关闭返回的编码器以刷新任何部分写入的块。
所以:
binval.Close() // <- add this fmt.Printf("%s\n", buf.String()[buf.Len()-5:])
另请参阅文档示例:
// Must close the encoder when finished to flush any partial blocks.
// If you comment out the following line, the last partial block "r"
// won't be encoded.
encoder.Close()
- 1 回答
- 0 关注
- 92 浏览
添加回答
举报
0/150
提交
取消