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