簡體   English   中英

如何使用DataOutputStream和DataInputStream進行序列化/反序列化?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM