Использование алгоритма Рида-Соломона в Java

В настоящее время я работаю над школьным проектом, связанным с генерацией QR-кодов, и у меня действительно огромная проблема с системой исправления ошибок. Я нашел этот веб-сайт http://www.pclviewer.com/rs2/calculator.html. , он работает как шарм, но это онлайн-инструмент, и мне нужно, чтобы именно эта функциональность была перенесена на Java. Есть ли способ найти это? Я попробовал класс zxing, но не могу понять, как использовать только часть Рида-Соломона (потому что, конечно, это единственная часть, которую я могу использовать).

Спасибо всем за ответы, и хорошего дня.


person Rogue    schedule 23.11.2013    source источник


Ответы (1)


Вы должны использовать реализацию в zxing. Я знаю, вы говорите, что не можете понять это, но, конечно, если вы посмотрите на код, вы увидите API. Это не становится намного проще, чем:

https://code.google.com/p/zxing/source/browse/trunk/core/src/main/java/com/google/zxing/common/reedsolomon/ReedSolomonEncoder.java#52

https://code.google.com/p/zxing/source/browse/trunk/core/src/main/java/com/google/zxing/common/reedsolomon/ReedSolomonDecoder.java#58

Вы можете увидеть, как они используются даже в QR-кодах:

https://code.google.com/p/zxing/source/browse/trunk/core/src/main/java/com/google/zxing/qrcode/decoder/Decoder.java#191

person Sean Owen    schedule 23.11.2013
comment
Хорошо, думаю, мне придется объяснить, что я использую только эту часть API, а не все... Попробую, спасибо. - person Rogue; 23.11.2013
comment
Работает ли реализация в zxing для общей кодировки Рида-Соломона в Java или она ограничена типом, поддерживаемым в QR-кодах? API ReedSolomonEncoder отличается от C++ Луиджи Риццо (Effective Erasure Codes... по той ссылке) реализация. Различные ресурсы, кажется, подразумевают, что библиотека zxing работает только для 256 байтов или меньше - может ли кто-нибудь пролить свет на это? Будет ли zxing работать для общей кодировки Рида-Соломона или только для типа, требуемого QR-кодами? - person user1978019; 16.08.2015
comment
Я не думаю, что это отличается или особенно, как в QR-кодах. Я не думаю, что различия API вам что-то говорят. Он, конечно, не ограничен 256 байтами — взгляните на модульные тесты, которые кодируют большие QR-коды. Я никогда не слышал иначе. - person Sean Owen; 16.08.2015
comment
Отлично, спасибо. Ваш комментарий здесь заставил меня задуматься, была ли реализация широко применимый: это реализует вариант, используемый в QR-кодах и матрице данных .... Для ваших целей вам, возможно, придется изменить .... Возможно, это будет иметь больше смысла, поскольку я понимаю математику. Спасибо! - person user1978019; 17.08.2015
comment
Я думаю, что имел в виду различные полиномы генератора, а не сам R-S, но я забыл. Я думаю, что это универсально применимо. - person Sean Owen; 18.08.2015
comment
Я понял, как использовать ReedSolomonEncoder. Это приводит меня к другому вопросу: кажется, что с n элементами данных и k элементами исправления ошибок получателю требуется n + k/2 элементов для восстановления сообщения. Это отличается от большинства других спецификаций, которые я читал (например, эта статья). Я провел несколько тестов, которые, кажется, подтверждают это. Чем мотивировано это различие? - person user1978019; 21.08.2015
comment
Нет, R-S всегда требуется 1 кодовое слово для исправления ошибок, чтобы исправить стирание, и 2, чтобы исправить ошибку. Об этом говорится в комментарии. - person Sean Owen; 22.08.2015
comment
Ооо, я вижу. В таком случае, надеюсь, последний вопрос: можно ли использовать библиотеку zxing для исправления стирания? Меня нет в офисе, поэтому у меня нет под рукой моего кода, чтобы проверить, но мне очень любопытно. Восстанавливает ли он на месте массив размера n, состоящий как из данных, так и из пакетов ec? Я бы подумал, что это будет зависеть от знания не только данных из пакетов ec (как указано параметром twoS), но и индекса, к которому относится пакет, который API, похоже, не включает. Огромное спасибо за помощь! - person user1978019; 22.08.2015
comment
В итоге я использовал эту библиотеку для исправления стирания. Это позволило мне иметь n пакетов данных, k пакетов исправления ошибок и потребовать, чтобы любое подмножество n пакетов восстановило все данные. - person user1978019; 10.10.2015