2012-03-05 116 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