Go 戈朗';s base64实现

Go 戈朗';s base64实现,go,base64,Go,Base64,最近,我一直在关注golang的base64实现 有人能解释一下编码器结构中buf的用途以及写入功能中的用法吗 type encoder struct { err error enc *Encoding w io.Writer buf [3]byte // buffered data waiting to be encoded nbuf int // number of bytes in buf out [1024

最近,我一直在关注golang的base64实现

有人能解释一下编码器结构中buf的用途以及写入功能中的用法吗

type encoder struct {
    err  error
    enc  *Encoding
    w    io.Writer
    buf  [3]byte    // buffered data waiting to be encoded
    nbuf int        // number of bytes in buf
    out  [1024]byte // output buffer
}

以下是完整的实施:

坦克:)

将输入的每个字节(8位)编码为输出的6位。要将其舍入为整数字节单位,每3个字节的输入将产生4个字节的
base64
输出

因此,当对字节流进行编码时,需要保持先前字节编码的状态,即3字节缓冲区


那么,如果输入流长度不是3的倍数,会发生什么呢?当流结束时,缓冲区中剩余的部分字节(即1或2字节)将填充一个或两个
=
字符。

您可以检查Base64二进制到文本编码的示例:

为了限制结果字符的使用(不包括填充
=
),Base64 encode选择每个结果字符仅表示6位

3个字节(24位)的二进制数据可以表示为4个(24位/6位=4)编码字符,这是完全使用分配的编码字符中的每个位的最小二进制数据数。为此,您需要将3个字节分组并将它们编码在一起

这就是为什么他们有一个3字节的缓冲区来编码一个给定的字节流。除非缓冲区已满或到达流的末尾,否则将不会写入任何内容