当前位置: 首页 > 面试题库 >

编码/目标确定吗?

轩辕晔
2023-03-14
问题内容

我们是否可以期望两个Go对象x,y等于x(假设接口和映射没有技巧性,仅是结构和数组),那么gob_encode(x)和gob_encode(y)的输出将始终相同?

编辑(2018年6月8日):

当涉及 地图* 时,gob编码是 不确定的 。这是由于映射的随机迭代顺序,导致其序列化被随机排序。 *


问题答案:

只要它“完成工作”,您就不需要真正关心。但是当前的encoding/gob实现是确定性的。但是(继续阅读)!

以来:

一滴滴水是自我描述的。流中的每个数据项之前都有其类型的规范,以一小套预定义类型表示。

这意味着如果您第一次编码类型的值,则将发送类型信息。如果您对另一个相同类型的值进行编码,则不会再次传输类型描述,而仅是对其先前规范的引用。因此,即使您对相同的值进行两次编码,也会产生不同的字节序列,因为第一个包含类型spec和值,第二个仅包含类型ref(例如,类型id)和值。

请参阅以下示例:

type Int struct{ X int }

b := &bytes.Buffer{}
e := gob.NewEncoder(b)

e.Encode(Int{1})
fmt.Println(b.Bytes())

e.Encode(Int{1})
fmt.Println(b.Bytes())

e.Encode(Int{1})
fmt.Println(b.Bytes())

输出(在Go Playground上尝试):

[23 255 129 3 1 1 3 73 110 116 1 255 130 0 1 1 1 1 88 1 4 0 0 0 5 255 130 1 2 0]
[23 255 129 3 1 1 3 73 110 116 1 255 130 0 1 1 1 1 88 1 4 0 0 0 5 255 130 1 2 0 5 255 130 1 2 0]
[23 255 129 3 1 1 3 73 110 116 1 255 130 0 1 1 1 1 88 1 4 0 0 0 5 255 130 1 2 0 5 255 130 1 2 0 5 255 130 1 2 0]

如图所示,第一个调用会Encode()生成大量字节,再加上我们的Int[5 255 130 1 2 0],第二个和第三个调用会添加相同的[5 255 130 1 2 0]序列。

但是,如果创建2个不同的gob.Encoders,并且以相同的顺序写入相同的值,则它们将产生精确的结果。

注意,在前面的语句中“相同的顺序”也很重要。因为类型规范是在发送该类型的第一个值时发送的,所以以不同顺序发送不同类型的值也会以不同顺序发送类型规范,因此类型的引用/标识符可能会有所不同,这意味着当此类类型已编码,将使用/发送不同的类型引用/
id。

还要注意,该gob软件包的实现可能因发行版本而异。这些更改将向后兼容(如果出于某种原因它们将进行向后不兼容的更改,则必须明确声明),但是向后兼容并不意味着输出是相同的。因此,不同的Go版本可能会产生不同的结果(但是所有兼容版本都可以解码)。



 类似资料:
  • 主要内容:实例1,实例2,A/B测试 - 生成假设下一步是设置转换目标。 查找确定变体是否比原始版本更成功的指标。目标是你的商业目标,举例来说,如果必须增加服装的销售目标,它可以是 - 清除产品图像。 提高实地考察率。 减少购物车的掉率。 接下来是定义满足您业务目标的指标。 只有在衡量与目标相关的东西时,度量才会成为KPI(关键绩效指标)。 实例1 例如,布料店的商业目标是销售衣服,因此该业务目标的关键绩效指标可以是在线销售的衣服数量。需要明确定

  • 问题内容: 我正在Go中编写一个应用程序,该应用程序使用编码/目标在节点之间通过UDP发送结构和切片。它工作正常,但我注意到encoding / json也具有类似的API。搜索并找到以下信息(https://golang.org/pkg/encoding/): gob软件包gob管理gob的流-编码器(发送器)和解码器(接收器)之间交换的二进制值。 json程序包json实现RFC 4627中定

  • 问题内容: 我收到了一些经过编码的文本,但是我不知道使用了什么字符集。有没有办法使用Python确定文本文件的编码?如何检测 C#处理的文本文件的编码/代码页。 问题答案: 但是,某些编码针对特定语言进行了优化,并且语言不是随机的。某些字符序列始终弹出,而其他字符序列毫无意义。一个会说英语的人,打开报纸发现,会立即意识到这不是英语(即使它完全由英文字母组成)。通过研究大量“典型”文本,计算机算法可

  • 问题内容: PEP 263定义了如何声明Python源代码编码。 通常,Python文件的前两行应以: 但是我看过很多以以下内容开头的文件: => 编码而不是编码。 那么,声明文件编码的正确方法是什么? 是了编码允许的,因为所使用的正则表达式是懒惰?还是仅仅是声明文件编码的另一种形式? 我问这个问题是因为PEP不在谈论编码,它只是在谈论编码。 问题答案: 在这里检查文档: “如果Python脚本的

  • 问题内容: 以编程方式确定输入流/文件的正确字符集编码的最佳方法是什么? 我尝试使用以下方法: 但是在我知道要用ISO8859_1编码的文件上,上面的代码会产生ASCII,这是不正确的,并且不允许我将文件的内容正确地呈现回控制台。 问题答案: 无法确定任意字节流的编码。这就是编码的本质。编码是指字节值与其表示形式之间的映射。因此,每种编码“都可以”是正确的。 的getEncoding()方法将返回

  • 因此,我最近开始使用ffmpeg下载实时流媒体视频,但我面临的问题是,下载的视频会阻塞很多,特别是对于长视频(如2小时)而言。 我当前用于下载流文件的命令:- ffmpeg-i"https://link. m3u8"-c复制output.mkv 此命令在35分钟长的视频中运行良好[没有任何卡滞问题],但在2小时长的视频中失败 当我试图使用x264 lib命令编码2小时长的视频时,它还显示了“无效长