- 浏览: 73875 次
- 性别:
- 来自: 广州
文章分类
最新评论
ObjectOutputStream和ObjectInputStream类所读写的对象必须实现了Serializable的接口,对象中的transient和static类型的成员变量不会被读取和写入.
下面是UML图
下面是代码例子1
当在继承的时候,超类如果不是可序列化,那么超类一定要有一个无参数的构造函数,以便允许初始化其字段。在此情况下,子类负责保存和恢复不可序列化的类的状态。不然会抛出这个异常java.io.InvalidClassException
下面会出现异常的版本
提供无参数构造函数的版本
下面是UML图
下面是代码例子1
import java.io.File; 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; import java.util.Iterator; import java.util.List; public class ObjectputStreamTest { private static File getFile() { return new File(System.getProperty("user.dir")+"/student.txt"); } /** * 读取文档数据 * @return */ @SuppressWarnings("unchecked") private static List<Student> getStudents() { File file = getFile(); List<Student> list = null; FileInputStream fis = null; ObjectInputStream ois = null; try { fis = new FileInputStream(file); if(fis.available()!=-1) { ois = new ObjectInputStream(fis); Object obj = ois.readObject(); list = (ArrayList<Student>)obj; }else { list = new ArrayList<Student>(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }catch (ClassNotFoundException e) { e.printStackTrace(); }finally { try { fis.close(); ois.close(); } catch (IOException e) { e.printStackTrace(); } fis = null; ois=null; } return list; } /** * 更改数据 * @param list */ private static void setStudents(List<Student> list) { File file = getFile(); FileOutputStream fos =null; ObjectOutputStream oos=null; try { fos = new FileOutputStream(file); oos = new ObjectOutputStream(fos); oos.writeObject(list); oos.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { try { fos.close(); oos.close(); } catch (IOException e) { e.printStackTrace(); } fos=null; oos=null; } } /** * 插入数据 * @param stu */ public static void insert(Student stu) { List<Student> list = getStudents(); list.add(stu); setStudents(list); } /** * 更新数据 * @param i * @param stu */ public static void update(int i,Student stu) { List<Student> list = getStudents(); list.remove(i); list.add(i,stu); setStudents(list); } /** * 删除数据 * @param i */ public static void delete(int i) { List<Student> list = getStudents(); list.remove(i); setStudents(list); } @SuppressWarnings("static-access") public static void print(List<Student> list) { for (Iterator<Student> iterator = list.iterator(); iterator.hasNext();) { Student student = (Student) iterator.next(); System.out.print("id="+student.getId()+",name="+student.getName()+",count="+student.getCount()+",sex="+student.getSex()+",serialVersionUID="+student.getSerialVersionUID()); System.out.println(); } } public static void main(String[] args) { List<Student> list = new ArrayList<Student>(); Student stu = new Student(); stu.setName("chendingqiang"); stu.setSex("男"); list.add(stu); stu = new Student(); stu.setName("limoumou"); list.add(stu); ObjectputStreamTest.setStudents(list); list = ObjectputStreamTest.getStudents(); print(list); System.out.println("=================================="); //修改 stu = new Student(); stu.setName("陈顶强"); ObjectputStreamTest.update(0, stu); list = ObjectputStreamTest.getStudents(); print(list); //删除 System.out.println("=================================="); ObjectputStreamTest.delete(0); list = ObjectputStreamTest.getStudents(); print(list); //插入 System.out.println("=================================="); stu = new Student(); stu.setName("zhumoumou"); ObjectputStreamTest.insert(stu); list = ObjectputStreamTest.getStudents(); print(list); } } class Student implements Serializable { private static final long serialVersionUID = 1L; private transient String sex;//瞬态不能序列化 private int id; private String name; private static int count=1; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Student() { id=count; count++; } @Override public boolean equals(Object obj) { if(obj instanceof Student) { Student stu = (Student)obj; if(this.id == stu.id) { return true; } } return false; } public static int getCount() { return count; } public static void setCount(int count) { Student.count = count; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public static long getSerialVersionUID() { return serialVersionUID; } }
当在继承的时候,超类如果不是可序列化,那么超类一定要有一个无参数的构造函数,以便允许初始化其字段。在此情况下,子类负责保存和恢复不可序列化的类的状态。不然会抛出这个异常java.io.InvalidClassException
下面会出现异常的版本
public class Shape { private int diameter; public int getDiameter() { return diameter; } public void setDiameter(int diameter) { this.diameter = diameter; } /** * 不提供无参数构造函数 * @param diameter */ public Shape(int diameter) { this.diameter = diameter; } } import java.io.Serializable; @SuppressWarnings("serial") public class Circle extends Shape implements Serializable { private int r; public Circle(int diameter,int r) { super(diameter); this.r = r; } public int getR() { return r; } public void setR(int r) { this.r = r; } } import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class ExtendObjecTest { public static void main(String[] args) { File file = new File(System.getProperty("user.dir")+"/student.txt"); Circle c = new Circle(12,32); FileOutputStream fos =null; ObjectOutputStream oos=null; try { fos = new FileOutputStream(file); oos = new ObjectOutputStream(fos); oos.writeObject(c); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { try { fos.close(); oos.close(); } catch (IOException e) { e.printStackTrace(); } fos=null; oos=null; } FileInputStream fis = null; ObjectInputStream ois = null; try { fis = new FileInputStream(file); ois = new ObjectInputStream(fis); Circle result = (Circle)ois.readObject(); System.out.println("diameter:"+result.getDiameter()+",r:"+result.getR()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } }
提供无参数构造函数的版本
public class Shape { private int diameter; public int getDiameter() { return diameter; } public void setDiameter(int diameter) { this.diameter = diameter; } /** * 提供无参数构造函数 * @param diameter */ public Shape() { } } @SuppressWarnings("serial") public class Circle extends Shape implements Serializable { private int r; public Circle(int r) { this.r = r; } public int getR() { return r; } public void setR(int r) { this.r = r; } } import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class ExtendObjecTest { public static void main(String[] args) { File file = new File(System.getProperty("user.dir")+"/student.txt"); Circle c = new Circle(32); c.setDiameter(23); FileOutputStream fos =null; ObjectOutputStream oos=null; try { fos = new FileOutputStream(file); oos = new ObjectOutputStream(fos); oos.writeObject(c); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { try { fos.close(); oos.close(); } catch (IOException e) { e.printStackTrace(); } fos=null; oos=null; } FileInputStream fis = null; ObjectInputStream ois = null; try { fis = new FileInputStream(file); ois = new ObjectInputStream(fis); Circle result = (Circle)ois.readObject(); System.out.println("diameter:"+result.getDiameter()+",r:"+result.getR()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } }
发表评论
-
java io字符读写
2010-12-15 13:05 667... -
RandomAccessFile类学习
2010-12-15 11:59 935在正式介绍如何使用Java的输入/输出相关类来进行文件存取前, ... -
比较java.io.Externalizable和java.io.Serializable
2010-12-15 10:52 840转http://soft.zdnet.com.cn/softw ... -
SequenceInputStream(顺序输入流)学习
2010-12-14 17:56 860转http://imain.iteye.com/blog/26 ... -
PipedInputStream与PipedOutputStream类
2010-12-14 17:39 1166转http://tzj163.blog.163.com/blo ... -
java io学习
2010-12-14 13:58 735下图是java.io输入流的uml图 InputStrea ... -
java rmi学习
2010-12-06 10:01 712转载http://blog.sina.com.cn/s/blo ... -
理解JAVA事件机制
2010-12-05 13:53 731转载http://ajava.org/course/java/ ... -
Java Proxy代理学习
2010-12-05 11:36 879在Java中利用代理(Proxy)可以在运行时创建一个实现了一 ... -
java.util.log学习
2010-12-03 17:14 1395今天学习java.util.logging类包方便以后查看。 ...
相关推荐
主要介绍了java序列化与ObjectOutputStream和ObjectInputStream的实例详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
我自己写的一些关于IO中的见解,可以用来参考。 File的增、删、改、查,FileReader和FileWriter类,BufferedReader和BufferedWriter类,ObjectOutputStream和ObjectInputStream类
ObjectInputStream 和 ObjectOutputStream 的作用是,对基本数据和对象进行序列化操作支持。本文给大家详细介绍了ObjectInputStream 和 ObjectOutputStream的相关知识,感兴趣的朋友一起学习吧
} 由于定义了二个接口方法,方法参数分别是ObjectOutputStream和ObjectInputStream类型对象,因此这二个接口方法必须通过实现该接口
使用流套接字建立客户机 运用ObjectOutputStream,ObjectInputStream,ServerSocket,Socket;
JavaIO对象流 FileInputStream 与 ObjectInputStream 和 ObjectOutputStream 的组合 奥利弗·缪尔
简洁分类 代码直接使用 InputStream OutputStream Reader Writer FileInputStream FileOutputStream FileReader FileWriter InputStreamReader ...ObjectOutputStream ObjectInputStream Scanner
套接字教程Python 和 Java 中的套接字教程。 虽然我已经包含了用于在 Python 和 Java 中设置服务器的文件,...聊天服务更多与套接字线程:下周见贝克的演讲ObjectOutputStream 和 ObjectInputStream 例子GUI Chat(见
在该方法中,首先通过FileInputStream和ObjectInputStream读取源文件对象,然后通过ObjectOutputStream将读取的对象写入备份文件中。这个简单的示例代码展示了如何使用Java序列化来实现一个文件备份工具的简单功能,...
程序使用了ObjectInPutStream和ObjectOutPutStream这两个文件输入输出流,利用这两个文件输入输出流,可以方便的直接将通讯记录对象直接写入文件中,另外为了方便添加和删除一条记录还使用了系统的对象数组类...
所谓的对象序列化(在很多地方也被成为串行化),是指将对象转换成二进制...ObjectInputStream类与ObjectOutputStream类,用于帮助开发者完成保存和读取对象成员变量取值的过程,但要求读写或存储的对象必须实现了Seria
java IO 字节流练习代码 FileInputStream和FileOutputStream BufferedInputStream 和 BufferedOutputStream DataInputStream 和 ...ObjectInputStream和ObjectOutputStream PrintStream PushbackInputStream
ObjectInputStream ois =new ObjectInputStream(is); // 2.获取输出流 OutputStream os = socket.getOutputStream(); ObjectOutputStream oos =new ObjectOutputStream(os); Choice c=new Choice(); c....
loadContactsFromFile()方法使用FileInputStream和ObjectInputStream对象来读取文件中保存的Contact对象列表。如果读取失败,会抛出IOException和ClassNotFoundException异常,此时会调用saveContactsToFile()方法将...
java实验1-实现搜索引擎的倒排索引数据结构 实验1知识点: 集合类的使用如ArrayList,HashMap ◦对这些集合类的操作包括...具体使用方法,请见hust.cs.javacourse.search.util.FileUtils类的read方法和write方法 设计
ObjectInputStream ObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化。 ObjectInputStream.GetField 提供对从输入流读取的持久字段的访问权限。 ObjectOutputStream ...
4.java.io包中的objectinputstream和objectoutputstream类主要用于对对象(Object)的读写。 5.android 中service的实现方法是:startservice和bindservice。 6.activity一般会重载7个方法用来维护其生命周期,除了...
ObjectInputStream 和所有FilterInputStream 的子类都是装饰流(装饰器模式的主角)。 2.输出字节流OutputStream IO 中输出字节流的继承图可见上图,可以看出: OutputStream 是所有的输出字节流的父类,它是一个...
掌握串行化概念,学会使用FileInputStream,FileOutputStream,ObjectInputStream,ObjectOutputStream等类输入输出对象。 明白通过捕获异常判定输入文件流的结束。 [*]知道使用RandomAccessFile...
ObjectInputStream和ObjectOutputStream 158 PrintStream 158 Reader 158 Writer 159 FileReader和FileWriter 159 BufferReader和BufferWriter 159 InputStreamReader和OutputStreamWriter 161 JAVA对象的序列化和反...