使用 Reed Solomon 解码,我们是否需要知道哪些碎片是正确的?

Using Reed Solomon decoding, do we need to know which shards are correct?

我在 Java 项目中使用 Reed-Solomon 纠错。我使用的图书馆是 JavaReedSolomon (https://github.com/Backblaze/JavaReedSolomon)。有一个使用 JavaReedSolomon 解码的例子:

byte[][] shards = new byte[NUM_SHARDS][SHARD_SIZE];
//shards is the array containing all the shards
ReedSolomon reedSolomon = ReedSolomon.create(NUM_DATA_SHARDS, NUM_PARITY_SHARDS);
reedSolomon.decodeMissing(shards, shardPresent, 0, shardSize);

数组shardPresent表示哪些shard肯定是正确的,比如你确定第4个shard是正确的,那么shardPresent[3]等于true。

我的问题是,Reed-Solomon 解码是否一定需要知道哪些碎片是正确的,或者这就是这个库如何实现它?

答案是否定的:解码过程可以从未知和已知错误(擦除)中恢复。一个 Reed-Solomon 代码(实际上,任何 MDS code) can correct twice as many erasures as errors. There are multiple ways 来确定错误定位器。

库中的 API 可能对应于它的用例,即可能有一些关于数据的哪些部分是正确的边信道信息。