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