![](/img/trans.png)
[英]Java DataOutputStream / DataInputStream OutOfMemoryError
[英]How to serialize/deserialize with DataOutputStream and DataInputStream?
我正在嘗試使用DataOutputSteam和DataInputSteam而不是ObjectInputStream / ObjectOutputStream進行序列化/反序列化。
序列化失敗。 txt文件保持為空。 當然,test2字符串最后都是空的(不能反序列化一個空文件)。
這是我的對象:
public class Test implements Serializable {
public String[] nom;
public Test() {
nom = new String[5];
nom[0] = "Coucou";
nom[1] = "Je suis un tab de String";
nom[2] = "Je vais me faire serialiser";
nom[3] = "Et deserialiser aussi !";
nom[4] = "Je suis le roi du monde !";
}
}
這是我的嘗試:
Test test = new Test();
Test test2 = new Test();
test2.nom[0] = "";
test2.nom[1] = "";
test2.nom[2] = "";
test2.nom[3] = "";
test2.nom[4] = "";
DataInputStream dis;
DataOutputStream dos;
// serialisation manuelle
try {
dos = new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream(
new File("nom2.txt"))));
for(int i = 0; i < 5; i++)
{
dos.writeUTF(test.nom[i]);
}
} catch (FileNotFoundException e) {
} catch (IOException e) {}
// deserialisation manuelle
dis = new DataInputStream(
new BufferedInputStream(
new FileInputStream(
new File("nom2.txt"))));
try {
test.nom[0] = dis.readUTF();
test.nom[1] = dis.readUTF();
test.nom[2] = dis.readUTF();
test.nom[3] = dis.readUTF();
test.nom[4] = dis.readUTF();
} catch (FileNotFoundException e) {
} catch (IOException e) {}
為了簡短說明,調用dos.flush()
將強制系統采取任何緩沖內容,並將其實際寫入磁盤。 因此,您需要先調用它,然后再嘗試讀取同一文件。 有關flush()
更多詳細信息,我建議查看Java流中flush()的目的是什么? 正如之前已經回答過的
打開輸出進行讀取之前,請嘗試關閉輸出文件 。 在某些系統(例如Windows)上,第二次打開不會成功。
關閉它會刷新BufferedOutputStream.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.