我的印象是,在for循环条件下,使用变量代替对string函数length()的方法调用总是更好的。尽管它似乎与在下面的回答中所分析的正好相反
for (int i = 0; i < data.length(); i++) {
...
}
比
final int len = data.length();
for (int i = 0; i < len; i++) {
...
}
原因何在?
我不一定有问题,我更好奇。如果我将AES填充模式设置为PKCS7,并加密长度为128的byte[],则输出byte[]为144。
var input = new string('0', 128);
var inputBytes = Encoding.UTF8.GetBytes(input);
using var aes = Aes.Create();
Console.WriteLine(aes.BlockSize); // 128 (bits)
aes.Padding = PaddingMode.PKCS7;
using var encryptedMessageStre
我从上读到了关于外部排序的文章,并且需要理解为什么2阶段合并比1阶段合并更有效。
Wiki :但是,单通道合并是有限制的.随着块数的增加,我们将内存分成更多的缓冲区,因此每个缓冲区都比较小,所以我们必须进行更小的读取,而不是更少的更大的读取。
因此,对于排序,例如,在100 MB RAM中进行50 GB的排序,使用一次合并传递并不有效:磁盘需要用来自500个块中的每个块的数据填充输入缓冲区(我们一次从每个块读取100 MB/ 501 ~200 GB)占用了大部分的排序时间。使用两个合并通道解决了这个问题。然后排序过程可能如下所示:
Run the initial chunk-sorti