java ObjectInputStream从文件中读取多个已经序列化的对象抛出java.io.StreamCorruptedException异常
每次从文件中读取都是只读文件中的第一序列化对象,已经确定文件中不止一个序列化对象,应为每次写入(appand)文件的大小都会变大。下面是写入序列化对象的代码Filenew...
每次从文件中读取都是只读文件中的第一序列化对象,已经确定文件中不止一个序列化对象,应为每次写入(appand)文件的大小都会变大。
下面是写入序列化对象的代码
File newFile = new File(path,fileName);
if(!newFile.exists()){
try {
newFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
FileOutputStream fos = null;
try {
fos = new FileOutputStream(newFile,isAppend);
try {
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(obj);
oos.flush();
oos.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
以下是读取序列化对象的代码:
public Object[] ReadFromFile(File file){
if(file == null){
return null;
}
ArrayList<Object> objs = new ArrayList<Object>();
try{
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
while(true){
Object obj=ois.readObject();
if(obj!=null){
objs.add(obj);
}
}
}
catch(Exception e){
e.printStackTrace();
System.out.println("文件信息读取完毕");
}
System.out.println(objs.size());
return objs.toArray();
} 展开
下面是写入序列化对象的代码
File newFile = new File(path,fileName);
if(!newFile.exists()){
try {
newFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
FileOutputStream fos = null;
try {
fos = new FileOutputStream(newFile,isAppend);
try {
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(obj);
oos.flush();
oos.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
以下是读取序列化对象的代码:
public Object[] ReadFromFile(File file){
if(file == null){
return null;
}
ArrayList<Object> objs = new ArrayList<Object>();
try{
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
while(true){
Object obj=ois.readObject();
if(obj!=null){
objs.add(obj);
}
}
}
catch(Exception e){
e.printStackTrace();
System.out.println("文件信息读取完毕");
}
System.out.println(objs.size());
return objs.toArray();
} 展开
1个回答
2015-11-23
展开全部
读多了吧,写入时,先写一个对象的数量,,,,读的时候,先读数量,然后就知道一共一多少对象了。。。。。。。。
追问
我文件里的对象的数量是不确定的,我的想法是让它一直读,当没有了它就会报异常,这是我要的东西都得到了,异常捕获一下就可以了,可是我的问题是读了第一个后读第二个就直接报了java.io.StreamCorruptedException异常了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询