【问题标题】:function to serialize arraylist and another one to deserialize序列化arraylist和另一个反序列化的函数
【发布时间】:2016-09-16 23:15:54
【问题描述】:

我想建立一个函数来序列化对象的ArrayList,另一个反序列化ArryList。也就是说,

public void serializeArrays(ArrayList<?> array,String className){
    FileOutputStream fileOut= null;
    ObjectOutputStream out=null;
    try {
      fileOut = new FileOutputStream("../Files/"+className+".ser");
       out = new ObjectOutputStream(fileOut);
      out.writeObject(array);
      fileOut.close();
      out.close();
    }catch (FileNotFoundException e) {
      e.printStackTrace();
    }catch(IOException e){
      e.printStackTrace();
    }
}

该代码将序列化ArrayList的对象,这是否意味着Arraylist的所有对象都将被序列化,或者只有第一个对象所以我必须循环整个数组?

反序列化的问题是返回类型不能是ArrayList,因为对象不是固定类,所以我让它返回一个Object,所以我会转换返回值。这样处理好不好?

public Object deserializeArrays(String className){
    try {
      FileInputStream fileIn = new FileInputStream("../Files/"+className+".ser");
      ObjectInputStream in = new ObjectInputStream(fileIn);
      return in.readObject();
    }catch (FileNotFoundException e) {
      e.printStackTrace();
    }catch(IOException ie) {
      ie.printStackTrace();
    }catch(ClassNotFoundException ce) {
      System.out.println(" "+className+" class not found");
      ce.printStackTrace();
    }
}

该代码中的问题是我无法关闭fileInin, 如果我把它放在最后,报错说:

未报告的异常IOException;必须被抓住或宣布被扔掉

而且又报错了

错误:缺少返回语句

【问题讨论】:

    标签: java serialization arraylist


    【解决方案1】:

    该代码将序列化ArrayList的对象,是否意味着Arraylist的所有对象都将被序列化?或者只有第一个对象,所以我必须循环整个数组

    如果该代码确实有效,则序列化集合将序列化它包含的所有项目(假设它们都是Serializeable,否则会出现异常)。

    反序列化的问题是返回类型不能是 ArrayList,因为对象不是固定类,所以我返回了 Object 类,所以我会强制转换返回值是处理它的好方法吗?,

    列表中对象的类型无关紧要。您可以通过强制转换将其反序列化为 ArrayList

    还报了另一个错误

    错误:缺少返回语句

    因为您没有return 声明。你应该返回ArrayList

    【讨论】:

    • 对于第 2,3 点:我无法在方法中进行转换,因为我不知道应该转换到哪个类,所以我只想返回一个 Object 并将其转换为主体。另外我把'return'放在try语句中,如果我把它放在try-catch之后,就会报这个错误:error: unreported exception IOException;必须被捕获或声明被抛出 return in.readObject();
    • @Ammar 你知道你投射到什么类 - ArrayList。另外,您已经在捕获IOException,并且您发布的方法没有给我那个错误。
    • 首先,是的,我可以将返回值强制转换为 ArrayList,但是我怎么知道类类型呢?我的意思是 ArrayList 我可以将其转换为 ArrayList 然后将结果再次转换为 ArrayList 我只是想返回通过 readObject() 方法读取的结果并在使用该方法时转换结果。上面的错误是error: missing return statement },如果我在try-catch之后加上'return',就会报这个错误:error: unreported exception IOException;必须抓到,那么我应该在哪里返回值呢?
    • @Ammar 您使用在方法参数中声明的相同泛型类型。您正在使用 > 这就是您所拥有的。
    猜你喜欢
    • 2019-03-17
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 2015-03-15
    • 2013-05-07
    相关资源
    最近更新 更多