Golang的base64实现
Golang's base64 implementation
最近在看golang的base64实现
谁能解释一下编码器结构中 buf 的用途以及 Write 函数中的用法?
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
}
完整的实现如下:
https://golang.org/pkg/encoding/base64/#NewEncoder
坦克:)
base64 将输入的每个字节(8 位)编码为 6 位输出。将其舍入为整数字节单位 - 每 3 个字节的输入将产生 4 个字节的 base64
输出。
因此,在对字节流进行编码时,需要保持先前字节编码的状态,即 3 字节缓冲区。
那么,如果输入流长度不是 3 的倍数会怎样?当流结束时,缓冲区中任何剩余的部分字节(即 1 或 2 个字节)将用一个或两个 =
个字符填充。
你可以查看Wikipedia中Base64binary-to-text编码的例子:
为了将结果字符的使用限制为使用 the 64 characters(不包括填充 =
),Base64 编码选择仅表示每个结果字符 6 位。
3字节(24位)的二进制数据可以表示为4(24位/6位=4)个编码字符,这是用完分配的编码字符中每一位的最小二进制数据数.为此,您需要将 3 个字节分组并将它们一起编码。
这就是为什么他们有一个 3 字节的缓冲区来编码给定的字节流。除非缓冲区已满或到达流的末尾,否则您不会写任何东西。
最近在看golang的base64实现
谁能解释一下编码器结构中 buf 的用途以及 Write 函数中的用法?
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
}
完整的实现如下:
https://golang.org/pkg/encoding/base64/#NewEncoder
坦克:)
base64 将输入的每个字节(8 位)编码为 6 位输出。将其舍入为整数字节单位 - 每 3 个字节的输入将产生 4 个字节的 base64
输出。
因此,在对字节流进行编码时,需要保持先前字节编码的状态,即 3 字节缓冲区。
那么,如果输入流长度不是 3 的倍数会怎样?当流结束时,缓冲区中任何剩余的部分字节(即 1 或 2 个字节)将用一个或两个 =
个字符填充。
你可以查看Wikipedia中Base64binary-to-text编码的例子:
为了将结果字符的使用限制为使用 the 64 characters(不包括填充 =
),Base64 编码选择仅表示每个结果字符 6 位。
3字节(24位)的二进制数据可以表示为4(24位/6位=4)个编码字符,这是用完分配的编码字符中每一位的最小二进制数据数.为此,您需要将 3 个字节分组并将它们一起编码。
这就是为什么他们有一个 3 字节的缓冲区来编码给定的字节流。除非缓冲区已满或到达流的末尾,否则您不会写任何东西。