IO流里的对象读取总是出错!各种报错!!神烦啊!!百思不得其解啊!然后就上网百度!找了好久终于让我找到了!下面就让我来说一说!
当你用IO流里的对象流写入的时候,ObjectOutputStream会在文件中的开头和结尾进行一个标识AC/DC,ObjectInputStream会严格的根据开头和结尾来进行读取,当读取不到的时候就会进行报错!!
ObjectOutputStream无法将上一次的对象的结尾的DC消除,所以千万不要用FileOutPutStream(“文件地址”,true)来添加;
当想要向文件中再次添加对象的时候,必须先进行读取文件中的对象并添加在集合中完毕后并关闭资源,然后遍历集合进行添加对象完毕并关闭资源!-----》先读取后添加!
代码中的注意点有一点是橘色的,这个很重要!当进行close的时候结尾(DC)也会随之而添加上!
我这个人比较倾向于实战!可以直接将我的代码复制到各位的eclipse中或其他的什么!代码中有详细的解释和一些被我注释掉的代码!那些也是正确可以运行的!各位也可以进行比较一下哪种方法好!
如果有错误的话,请指正!!!
import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
//想要序列化对象必须接口Serializable,否则不能被序列化
class Car implements Serializable{
/**
* 给对象添加一个唯一的ID,便于以后增删成员变量!
*/
private static final long serialVersionUID = 1L;
String brand;
transient String owner;//添加transient 防止此成员变量被泄露!
public Car(String brand,String owner){
this.brand = brand;
this.owner = owner;
}
}
public class ObjectOutAndIn {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
/**
* ********写入方法**********
*/
/*(1)*///writerIn();
/**
* ********读取方法**********
*/
/*(2)*///readerOut();
/**
* ****读取/写入多个对象的方法****
* 建议将步骤一和二注释掉!
*/
/*(3)*/writerInAndreaderOut();
}
public static void writerInAndreaderOut(){
/**
* 当想写入多个对象时,有两种方法!
* 方法一:(1)创建一个集合将对象添加进该集合,然后将集合的对象写入文件中;
* (2)等到用的时候直接读取集合对象,从集合中获取对象
* 方法二:(1)创建一个集合将对象添加进该集合,然后遍历集合对象
* (2)用同一个对象写入流来写入对象
* 对象写入注意:(1)当写入对象的时候,对象写入流会在开头和结尾添加AC/DC
* (2)必须用同一个对象写入流写入,因为在对象写入流close的时候会添加DC
* ,再次写入另外