硬逻辑 - 反转格式

Hard logic - Reversing a format

我有这段从文件中读取的代码:

dummy = fd.readLong();
for(i = 0; i < chunks; i++) {
    dummy2=fd.readLong();
    chunksizes[i] = dummy2- dummy;
    dummy = dummy2;
}

我现在有一个块大小列表,我想用上面的格式写它们。我有一个名为 actualSizes 的数组,它是我想要写入的大小,我有块的数量。任何可以做到这一点的伪代码?我的脑袋都快疯了,但看起来很简单

似乎该文件有一个 偏移量列表 并且您将它们作为增量(块大小)加载到数组中:

0    100   250   420   580    Offsets from file
└──┬──┴──┬──┴──┬──┴──┬──┘
  100   150   170   160       Deltas, aka chunk sizes

然后你说:

I now have a list of chunk sizes and I want to write them in the format above.

唯一的“上述格式”是 偏移量列表,因此您可以从增量 (chunk/actual) 大小列表创建偏移量列表,通过从 0 开始写一个 运行 总和:

long offset = 0;
fd.writeLong(offset);
for (long size : actualSizes) {
    offset += size;
    fd.writeLong(offset);
}
  120   140   130   150       actual sizes
┌──┴──┬──┴──┬──┴──┬──┴──┐
0    120   260   390   540    offsets in file (running total)