RandomStringUtils 是否创建确定性或可重现的序列?
Does RandomStringUtils create a deterministic or reproducible sequence?
在 Java 应用程序服务器上,我们使用 RandomStringUtils.randomAlphabetic()
以迭代方式为重复出现的相似段落顺序创建 HTML-ID。
通过这些生成的 ID,我们允许进行页面内锚导航(点击时不会触发页面加载)。
现在的问题是,我能否将这些生成的 ID 也用于从外部页面链接到该目标的 URL?
根据我的观察,对同一页面的后续请求会创建相同的 ID 序列。如果 randomAlphabetic
的生成序列确实是可预测的(在多个页面加载时也是如此),我们不仅可以将这些链接用于页面内导航,还可以用于从外部引用的链接,因为第一,第二,第三, ...生成的 ID 将始终相同。
如果段落的给定文本字符串的“随机”ID 始终相同(即,ID 只是段落文本的函数),那么您应该考虑散列函数,而不是伪随机数生成器,例如 randomAlphabetic
。 (我假设对于识别页面部分的用例,为不同的文本字符串生成重复 ID 的风险可以忽略不计。但是,如果您不能容忍这种风险,.) There are many kinds of hash functions for this purpose; even java.lang.String.hashCode()
will work here since the Java documentation for this method 指定了它使用的确切算法.
此外,randomAlphabetic
不是您想要的“确定性”,原因有两个:
- 您无法设置该方法使用的底层生成器的种子(
RandomStringUtils
存储使用未定义种子初始化的静态 PRNG 变量,即 new Random()
)。
RandomStringUtils.randomAlphabetic
(以及其他 RandomStringUtils
方法)的文档没有指定它用于生成随机字符串的确切算法。
在 Java 应用程序服务器上,我们使用 RandomStringUtils.randomAlphabetic()
以迭代方式为重复出现的相似段落顺序创建 HTML-ID。
通过这些生成的 ID,我们允许进行页面内锚导航(点击时不会触发页面加载)。
现在的问题是,我能否将这些生成的 ID 也用于从外部页面链接到该目标的 URL?
根据我的观察,对同一页面的后续请求会创建相同的 ID 序列。如果 randomAlphabetic
的生成序列确实是可预测的(在多个页面加载时也是如此),我们不仅可以将这些链接用于页面内导航,还可以用于从外部引用的链接,因为第一,第二,第三, ...生成的 ID 将始终相同。
如果段落的给定文本字符串的“随机”ID 始终相同(即,ID 只是段落文本的函数),那么您应该考虑散列函数,而不是伪随机数生成器,例如 randomAlphabetic
。 (我假设对于识别页面部分的用例,为不同的文本字符串生成重复 ID 的风险可以忽略不计。但是,如果您不能容忍这种风险,java.lang.String.hashCode()
will work here since the Java documentation for this method 指定了它使用的确切算法.
此外,randomAlphabetic
不是您想要的“确定性”,原因有两个:
- 您无法设置该方法使用的底层生成器的种子(
RandomStringUtils
存储使用未定义种子初始化的静态 PRNG 变量,即new Random()
)。 RandomStringUtils.randomAlphabetic
(以及其他RandomStringUtils
方法)的文档没有指定它用于生成随机字符串的确切算法。