Используя декодирование Рида Соломона, нужно ли знать, какие осколки верны?
Я использую исправление ошибок Рида-Соломона в проекте Java. Я использую библиотеку 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.
Мой вопрос заключается в том, нужно ли для декодирования Рида-Соломона обязательно знать, какие осколки верны, или просто в этой библиотеке это реализовано?
1 ответ
Ответ - нет: процедура декодирования может восстанавливаться как от неизвестных, так и от известных ошибок (стираний). Код Рида-Соломона (фактически любой код MDS) может исправить в два раза больше стираний, чем ошибок. Есть несколько способов определить локатор ошибок.
Вероятно, API в библиотеке соответствует его варианту использования, то есть, вероятно, имеется некоторая побочная информация о том, какие части данных являются правильными.