如何与dataoutputstream和datainputStream序列化/应序列化



我正在尝试使用dataoutputSteam和datainputSteam而不是ObjectInputSteam/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()的目的是什么?由于之前已经回答过。

尝试在打开读取之前关闭输出文件。在某些系统上,例如窗户您将不会在第二个开放中成功。

关闭它将冲洗BufferedOutputStream.

相关内容

  • 没有找到相关文章

最新更新