Вы забыли опубликовать SSCCE , поэтому вот один для вас:
BigInteger big = new BigInteger("515377520732011331036461129765621272702107522001");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream outputStream = new ObjectOutputStream(baos);
outputStream.writeObject(big);
byte[] rawBytes = baos.toByteArray();
ObjectInputStream inputStream = new ObjectInputStream(new ByteArrayInputStream(rawBytes));
BigInteger bigReadBack = (BigInteger) inputStream.readObject();
assertThat(big).isEqualTo(bigReadBack);
Работает как шарм, сериализует и десериализует 3^100
. Можете ли вы попробовать код выше?
ОБНОВЛЕНИЕ: пример с файлом (извините за неописательные имена переменных):
BigInteger big = new BigInteger("515377520732011331036461129765621272702107522001");
OutputStream fos = new FileOutputStream("big.ser");
ObjectOutputStream outputStream = new ObjectOutputStream(fos);
outputStream.writeObject(big);
fos.close();
ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("big.ser"));
BigInteger bigReadBack = (BigInteger) inputStream.readObject();
assertThat(big).isEqualTo(bigReadBack);
Кстати, хранение сериализованных Java-двоичных данных в файле с расширением .txt
, как правило, плохая идея ... И не забывайте о кэшировании! (BufferedInputStream
/ BufferedOutputstream
).