【问题标题】:Trouble Serializing/Deserializing an array list from a text document Java麻烦从文本文档 Java 序列化/反序列化数组列表
【发布时间】:2012-07-25 19:25:37
【问题描述】:

我在从序列化文本文件中读取数组列表方面需要帮助,我不认为我遇到了问题,但是我看不到它是否真的存储了所有信息,因为我无法打印出来进行测试,这里是代码片段: 当我从文件中读取时,我得到 ArrayList 无法转换为 StoreAddress

   FileInputStream ios = new FileInputStream("C:\\Users\\Mr Cata\\Desktop\\Testingoutput.txt");
   ObjectInputStream ois = new ObjectInputStream(ios);
   StoreAddress SAR = (StoreAddress)ois.readObject();
   ArrayList<StoreAddress> ALStore = (ArrayList)ois.readObject();

   for(int i = 0; i < ALStore.size(); i++){
        String list = ALStore.get(i).toString();            
   }

   ios.close();

下一个

for(int i = 0; i < ALStore.size(); i++){
   ALStore.get(i);                  
}

...

for(int i = 0; i < ALStore.size(); i++){
   if (i >= ALStore.size())
   {
        ALStore.add(SA);}
   }

   FileOutputStream fos = new FileOutputStream("C:\\Users\\Mr Cata\\Desktop\\Testingoutput.txt");
   ObjectOutputStream oos = new ObjectOutputStream(fos);

   oos.writeObject(ALStore);
   fos.close();
}

【问题讨论】:

    标签: java object serialization arraylist text-files


    【解决方案1】:

    当你写入文件时,你会像这样写

    for(int i = 0; i < ALStore.size(); i++){
      if (i >= ALStore.size()) {
             ALStore.add(SA);
            }
        }
    FileOutputStream fos = new FileOutputStream("C:\\Users\\MrCata\\Desktop\\Testingoutput.txt");
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    
    oos.writeObject(ALStore);
    fos.close();
    

    你在写这个

    ALStore

    这是您提到的数组列表。但是当你阅读时,你的 sn-p 看起来像

    FileInputStream ios = new FileInputStream("C:\\Users\\MrCata\\Desktop\\Testingoutput.txt");
     ObjectInputStream ois = new ObjectInputStream(ios);
     StoreAddress SAR = (StoreAddress)ois.readObject();
     ArrayList<StoreAddress> ALStore = (ArrayList)ois.readObject();
     for(int i = 0; i < ALStore.size(); i++){
        String list = ALStore.get(i).toString();
    
      }
    
     ios.close();
    

    你需要注意的是你只写了数组列表对象,但没有写StoreAddress。如果是这样,那行需要什么

     StoreAddress SAR = (StoreAddress)ois.readObject();
    

    在 sn-p 中?这就是这里的问题。删除它,它应该可以正常工作。

    【讨论】:

      【解决方案2】:

      1.创建一个类,其中包含一个 ArrayList&lt;Your_Type&gt;.

      的实例变量

      2。创建该类的一个对象,并Serialize the object 并将其存储在“Myfile.ser”中。

      3.De-serializing 时,将对象转换为原始类型..

      例如:

                Cat c = (Cat) inputS.readObject();
      

      4.现在从此对象引用变量中访问 ArrayList。

      **eg:**
      
                c.myArr;
      

      您可以使用 for-each 如果您愿意..like this..

      打印数组列表的元素
            for (Your_type t : myArr){
      
                   System.out.println(t);
      
         }
      

      【讨论】:

      • 我已经有一个单独的序列化类,或者你是说让数组列表在序列化类中存储一个字符串数组?
      • 首先告诉我你的 ArrayList 有什么......其次不要序列化 ​​ArrayList,而是序列化持有这个 ArrayList 作为实例变量的类
      • 序列化类包含一堆通过用户输入从 GUI 接收的字符串。
      • 好的..所以您存储的是具有多个字符串的单个序列化对象,或者具有多个字符串的多个序列化对象....??不管怎样,将它们存储在 ArrayList 中并对其进行序列化。然后在反序列化期间将其转换为 Serialized 类对象类型。
      【解决方案3】:

      在最后一个代码 sn-p 中,您对 ArrayList&lt;ALStore&gt; 进行了一次写入,但在您的第一个代码 sn-p 中,您尝试进行两次读取,第一个是 StoreAddress 实例。

      因此出现强制转换异常。

      顺便说一句,尽量遵守 Java 用驼峰式写变量的约定。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-03
        相关资源
        最近更新 更多