Java 使用ObjectInputStream从文件中读取多个ArrayList对象?

Java 使用ObjectInputStream从文件中读取多个ArrayList对象?,java,serialization,java-io,Java,Serialization,Java Io,我将ArrayList写入一个文件。我用FileInputStream阅读它。但总是只有“第一个”数组列表通过读取显示。我用readInt()/wirteInt()和循环进行了尝试,但通过调用readInt()-->EOF,总是会抛出异常 我想将此文件中的所有ArrayList读入ArrayList。我的应用程序需要持久化,所以我序列化了ArrayList 写入文件: 从文件中读取: List cachedValueList = new ArrayList<String>();

我将ArrayList写入一个文件。我用FileInputStream阅读它。但总是只有“第一个”数组列表通过读取显示。我用readInt()/wirteInt()和循环进行了尝试,但通过调用readInt()-->EOF,总是会抛出异常 我想将此文件中的所有ArrayList读入ArrayList。我的应用程序需要持久化,所以我序列化了ArrayList

写入文件:

从文件中读取:

 List cachedValueList = new ArrayList<String>();
    ObjectInputStream o = new ObjectInputStream(new FileInputStream("caching.io"));
  //  int count = o.readInt(); // Get the number of regions

    try {

            cachedValueList.add(o.readObject());

    } catch (EOFException e) {
        o.close();
        e.printStackTrace();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
List cachedValueList=new ArrayList();
ObjectInputStream o=新的ObjectInputStream(新文件输入流(“caching.io”);
//int count=o.readInt();//获取区域数
试一试{
add(o.readObject());
}捕获(EOFEException e){
o、 close();
e、 printStackTrace();
}catch(filenotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}catch(classnotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}

如果您多次编写同一个列表,它只会编写一次列表。之后,它将使用相同的引用,但内容将是相同的(这适用于任何对象)


如果在writeObject()之间调用
reset()
,每次都会发送列表的新副本。

循环在哪里?为什么不简单地编写一个列表,而不是一个接一个地循环和编写所有列表?
os.writeObject(newValueList)-什么类型的
新值列表
<代码>cachedValueList.add(o.readObject())-您打算阅读什么?似乎您打算读取
字符串
。我认为您尝试编写某种列表,然后读取一个列表对象并将其添加到另一个列表(隐式转换为字符串)@JBNizet我怀疑问题在于他重复使用同一个列表obj;_historyValueList.add(cachedValueList);}}@MaxL请注意,该循环不正确
readObject()
在流的末尾不返回null:它抛出
EOFEException
'无效类型代码:AC'表示您在同一套接字上使用了多个
ObjectOutputStream
:不要这样做。
 List cachedValueList = new ArrayList<String>();
    ObjectInputStream o = new ObjectInputStream(new FileInputStream("caching.io"));
  //  int count = o.readInt(); // Get the number of regions

    try {

            cachedValueList.add(o.readObject());

    } catch (EOFException e) {
        o.close();
        e.printStackTrace();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }