2 回答
TA贡献1862条经验 获得超6个赞
首先,我们必须了解编码过程实际上并不意味着它会翻译types并返回 a 的 JSON 表示type。为您提供 JSON 表示的过程称为编组过程,可以通过调用json.Marshal 函数来完成。
另一方面,Encoding过程意味着我们想要获取 any 的 JSON 编码type并将其写入(编码)到实现 io.Writer 接口的流上。正如我们所见,func NewEncoder(w io.Writer) *Encoder接收一个io.Writer接口作为参数并返回一个*json.Encoder对象。调用该方法时encoder.Encode(),它会执行 Marshaling 过程,然后将结果写入我们在创建新 Encoder 对象时传递的 io.Writer 中。你可以在这里看到 json.Encoder.Encode() 的实现。
所以,如果你问是谁对 http 流进行编码处理,答案是http.ResponseWriter. ResponseWriter 实现了 io.Writer 接口,在Encode()调用该方法时,编码器会将对象编组为 JSON 编码表示,然后调用func Write([]byte) (int, error)io.Writer 接口的一个契约方法,它会对http 流。
总之,我可以说 Marshal 和 Unmarshal 意味着我们想要获得任何类型的 JSON 表示,反之亦然。而编码意味着我们要进行编组处理,然后将结果写入(编码)到任何流对象。而解码意味着我们想要从任何流中获取(解码)一个 json 对象,然后执行 Unmarshaling 过程。
TA贡献1821条经验 获得超6个赞
json.Encoder调用产生的json.NewEncoder直接以 UTF-8 产生其输出。无需转换。(事实上,Go 没有与 UTF-8 编码的字节序列不同的文本数据表示形式——即使 astring只是底层的不可变字节数组。)Go 使用术语编码进行序列化和解码用于反序列化,无论序列化形式是二进制形式还是文本形式。不要过多考虑术语——将encode和seralise视为同义词。
- 2 回答
- 0 关注
- 888 浏览
添加回答
举报
