【问题标题】:Break stream of digits into smaller chunks for processing将数字流分成更小的块进行处理
【发布时间】:2014-11-18 03:30:13
【问题描述】:

请理解我要提出的问题是学术问题,因此在现实世界的应用程序中可能没有意义。

我有一个可以正常运行的示例程序。该程序将数据写入文件,其中每一行都是一个字节。这些行是这些字节的数字表示。此数字表示是 128 位 RSA 字节加密的结果。

例如第一行:

96044789616462297850953361101470572607 翻译(解密)为 60,字节 60 当然是 这是正确的,因为这是一个 xml 文档。

现在示例程序具有明显的优势,因为加密的源文件在所有正确的位置都有换行符。

我的自我追求是尝试从数字流中读取。因此,示例程序读取 4 行并处理每一行:

96044789616462297850953361101470572607 == 60 == <
40994093243674456311017847789777907446  == 63 == ?
61444338813524296592539084778436332638  == 120 == x
169017452170450092162160631302176410189  == 109 == m
//Note how the fourth line is 39 not 38 digits

我会:

960447896164622978509533611014705726074099409324367445631101784778977790744661444338813524296592539084778436332638169017452170450092162160631302176410189......

现在我最初想每隔 38 位拆分一次:

lineSplitted = Enumerable.Range(0, (line.Length / 38)).Select(l => line.Substring(l * 38, 38)).ToArray();

但如上所述,这不是一个有保证的分隔符。所以似乎我必须在构建流时注入一个分隔符。例如像 1971791 这样的回文,我可以在阅读时识别并用于拆分。

这是解决这个问题的正确方法吗?识别并从流中提取每个加密段以进行解密?


编辑:

因此,从 cmets 看来,分隔符是使用的方法。按照@usr 的建议避免使用数字分隔符,我使用了 split |当然 base64 编码和解码都很好。

【问题讨论】:

  • 所以;您正在使用行分隔文件并构建辅助文件;要读取的非行分隔流?您是否考虑将行分隔文件解析为集合并从中读取?
  • 好吧,如果我留在本地,那可以工作。但我的沙盒场景是生成一个流发送到其他地方,并且接收者能够处理它。
  • 您愿意使用非数字分隔符吗?回文现在不能保证自然地出现在流中。在我看来,没有数字序列是安全的分隔符。
  • 为什么不分块发送(即一次一到两个字节)。那你就不需要“流”了吗?
  • 那么Split('|') 对你有用吗?这太容易了,可能是作弊。

标签: c#


【解决方案1】:

您愿意使用非数字分隔符吗?考虑使用Split('|')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 2022-10-05
    • 1970-01-01
    • 2018-11-24
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多