我在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表示哪些分片肯定是正确的,例如,如果您确定第4个分片是正确的,那么shardPresent [3]等于true。
我的问题是,Reed-Solomon解码必然需要知道哪些分片是正确的,或者只是这个库如何实现它?
答案 0 :(得分:1)
答案是否定的:解码过程可以从未知和已知错误(擦除)中恢复。 Reed-Solomon代码(事实上,任何MDS code)可以纠正错误的两倍。有multiple ways来确定错误定位器。
库中的API很可能与其用例相对应,即可能存在一些关于哪些部分数据正确的旁道信息。