2012-03-05 119 views
-2

我必须使用以下语句将一个biginteger写入文本文件。在java中序列化BigInteger

out.writeObject(n1); 

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

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

in.readObject(); 

感谢。

+1

请显示更多代码。 BigInteger对象的序列化通常不会更改该值。 – 2012-03-05 08:40:32

+0

FileOutputStream fos = new FileOutputStream(“file.txt”); ObjectOutputStream out = new ObjectOutputStream(fos); out.writeObject(n1); – Manikandan 2012-03-05 09:02:42

+0

@Mandikan:请编辑您的问题,并将其添加到它。如果可以避免,请勿在注释中张贴代码。 – 2017-12-15 17:15:34

回答

6

你忘了张贴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存储与.txt扩展名的文件的Java序列化的二进制数据通常是一个坏主意...和Don”不要忘了缓存! (BufferedInputStream/BufferedOutputstream)。

+0

但我需要将它存储在一个文件中..它怎么能帮助我? – Manikandan 2012-03-05 09:04:56

+0

@Manikandan:看看我的更新,'FileOutputStream'的例子。 – 2012-03-05 09:11:33

+0

雅谢谢@tomasz – Manikandan 2012-03-06 05:42:51