2016-11-06 105 views
0

我在一个Java项目中使用Reed-Solomon错误更正。我使用的库是JavaReedSolomon(https://github.com/Backblaze/JavaReedSolomon)。存在使用JavaReedSolomon解码的一个示例:使用Reed Solomon解码,我们是否需要知道哪些分片是正确的?

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表示碎片肯定是正确的,例如,如果是肯定的第四碎片是正确的,那么shardPresent [3]等于true。

我的问题是,Reed-Solomon解码必然需要知道哪些分片是正确的,或者这个库如何实现它?

回答

1

答案是否定的:解码过程可以从未知和已知错误(擦除)中恢复。 Reed-Solomon代码(实际上,任何MDS code)都可以纠正错误的两倍。有multiple ways来确定错误定位器。

库中的API很可能与其使用情况相对应,即可能存在一些关于数据的哪些部分是正确的侧通道信息。