Go 戈朗';s base64实现
最近,我一直在关注golang的base64实现 有人能解释一下编码器结构中buf的用途以及写入功能中的用法吗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
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字节的缓冲区来编码一个给定的字节流。除非缓冲区已满或到达流的末尾,否则将不会写入任何内容