在java中序列化BigInteger

时间:2012-03-05 08:32:55

标签: java serialization biginteger

我必须使用以下语句将biginteger写入文本文件。

out.writeObject(n1);

其中我的n1是长度为512位的大整数。

从文本文件中读取相同的对象会给我一个与n1不同的值。任何人都可以帮我解决这个问题。 用于读取值的语句是:

in.readObject();

提前致谢。

1 个答案:

答案 0 :(得分:7)

您忘了发帖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);

BTW将Java序列化的二进制数据存储在.txt扩展名的文件中通常是一个坏主意......并且不要忘记缓存! (BufferedInputStream / BufferedOutputstream)。