Java BigInteger с очень большими двоичными числами

у меня есть 2 очень больших двоичных числа (144 цифры). Я хочу записать их в разные RandomAccessFiles, а затем прочитать файлы в память и проверить, какое число больше. Что я сделал до сих пор:

1. Я создал BigInteger:

BigInteger big = new BigInteger("01110101010010101010111100010101010101010101010110101010101010101010010101010101010101010101010101111010010101010",2);

2. Я получаю длинное значение:

big.longValue();   

3.. Я записываю лонги в файл случайного доступа, читаю файлы, сравниваю лонги и т.д...

Но если двоичный файл длиннее, чем 'Long.maxvalue', что я сделал неправильно, верно?

Так у кого-нибудь есть предложения?

Могу ли я иначе обрабатывать большие двоичные числа?


person George    schedule 15.10.2013    source источник
comment
Почему бы вам просто не записать большое целое число в файл? BigInteger по умолчанию сериализуемы. Проверьте ObjectInputStream. Вы также можете проверить, просто написав строку, эквивалентную файлу.   -  person maress    schedule 15.10.2013
comment
Вы можете использовать битовый поток . Теоретически long не следует использовать для представления битов.   -  person Mr. Polywhirl    schedule 15.10.2013


Ответы (3)


попробуйте сравнить, как показано ниже

           BigInteger big1 = new BigInteger("01110101010010101010111100010101010101010101010110101010101010101010010101010101010101010101010101111010010101010",2);
           BigInteger big2 = new BigInteger("01110101010010101010111100010101010101010101010110101010101010101010010101010101010101010101010101111010010101010",2);
           int result =big1.compareTo(big2);
           System.out.println(result);
person upog    schedule 15.10.2013
comment
Поскольку я использую RandomAccessFile, я хотел бы иметь возможность искать. Я мало знаю о сериализации, могу ли я написать свой BigInteger, сериализованный как String? Я хочу знать, сколько байтов потребуется в файле, чтобы искать, когда я читаю файлы. Вот почему я конвертирую его в длинный (8 байт). Я хочу в файл: писать int, писать int, писать большие двоичные файлы, писать int, писать int, писать большие двоичные файлы.... и т. д., а затем иметь возможность читать все значения и сравнить двоичные числа. - person George; 15.10.2013

  1. исключить начальные нули

  2. Преобразуйте эти числа в строки

  3. if(String1.length !=String.length ) максимальное число больше

еще

возьми по одной цифре с начала и сравни.

if(string1 digit x = 0 & string 2 digit x=0) перейти к следующей цифре

if(string1 digit x = 1 & string 2 digit x=0) Строка 1 большая

если (строка 1 цифра x = 0 и строка 2 цифра x = 1) Строка 2 большая

person Madhujith    schedule 15.10.2013

Очевидно, что ваш номер слишком велик для длинной.

Я рекомендую вам экспортировать BigInteger в виде массива байтов, используя BigInteger.getByteArray(), а затем вы можете сохранить его в файл (это то, что мы делаем в криптографии).

Кроме того, массив байтов можно преобразовать обратно в BigInteger с помощью его конструктора.

person Vincent Cantin    schedule 15.10.2013
comment
Итак, Винсент и большое спасибо. Что мне нужно сделать, так это преобразовать двоичное число в BigInteger, записать его в файл с помощью getByteArray(), прочитать его из файла с помощью конструктора BigInteger(byteArray[]), а затем сравнить BigIntegers с помощью big1.compareTo(big2). Подвожу итог для всех, у кого такая же проблема. Спасибо еще раз! - person George; 15.10.2013
comment
Пожалуйста. Не забудьте отметить этот ответ как решение, если считаете нужным. - person Vincent Cantin; 16.10.2013