我正在处理MIME消息生成代码,并且我希望在流模式下为任何给定输入生成尽可能小的boundaries,即使是未知长度。
现在我最终得到了基于随机生成器的足够好的解决方案。基本上我生成32个Base64符号的随机字符串,并尝试在其中找到不是MIME消息体的子字符串的最短子字符串。
这不是完美的解决方案,因为:
边界并不总是最短的。对于非常简单的示例:对于仅alpha文本,边界可能只是一个数字,但生成的边界材料只能包含alpha。
每次运行应用程序时,我都需要随机生成器和唯一种子。理想情况下,确定性算法更好。
这就是我想知道的。保持流算法属性,固定内存量,确定性并生成理想的最短边界是可能的吗?或者我们只能通过权衡获得一些属性?
答案 0 :(得分:1)
所有边界都以--
开头,并且位于单独的一行。您可以使用它来创建所有可能的"类边界"的列表。正文中的单词,然后创建一个独特的单词(例如lexicographically)。
此外,假设你的部分少于26个,你可以简单地使用单个字母,如果你想要尽可能短的"边界。在这种情况下,扫描可以使用正则表达式完成:
^--([a-z])$
这(在多行上下文中)将匹配所有单个字母"类似上下文"电子邮件正文中的令牌。
假设您将匹配值列表放在哈希集中,那么您可以使用类似
的内容生成令牌('a'...'z').where(!tokenHashSet.contains)
以上所有都是伪代码,希望它很清楚。