我必須使用以下語句將一個biginteger寫入文本文件。在java中序列化BigInteger
out.writeObject(n1);
其中我的n1是長度爲512位的大整數。
從文本文件讀取相同的對象給了我一個不同的值n1。任何人都可以幫我解決這個問題。 用來讀取值的語句是:提前
in.readObject();
感謝。
我必須使用以下語句將一個biginteger寫入文本文件。在java中序列化BigInteger
out.writeObject(n1);
其中我的n1是長度爲512位的大整數。
從文本文件讀取相同的對象給了我一個不同的值n1。任何人都可以幫我解決這個問題。 用來讀取值的語句是:提前
in.readObject();
感謝。
你忘了張貼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
)。
但我需要將它存儲在一個文件中..它怎麼能幫助我? – Manikandan 2012-03-05 09:04:56
@Manikandan:看看我的更新,'FileOutputStream'的例子。 – 2012-03-05 09:11:33
雅謝謝@tomasz – Manikandan 2012-03-06 05:42:51
請顯示更多代碼。 BigInteger對象的序列化通常不會更改該值。 – 2012-03-05 08:40:32
FileOutputStream fos = new FileOutputStream(「file.txt」); ObjectOutputStream out = new ObjectOutputStream(fos); out.writeObject(n1); – Manikandan 2012-03-05 09:02:42
@Mandikan:請編輯您的問題,並將其添加到它。如果可以避免,請勿在註釋中張貼代碼。 – 2017-12-15 17:15:34