对象的输入输出流的作用: 用于写入对象 的信息和读取对象的信息。 使得对象持久化。    ObjectInputStream   : 对象输入流    ObjectOutPutStream  :对象输出流

简单的实例

 1 import java.io.File;
2 import java.io.FileInputStream;
3 import java.io.FileOutputStream;
4 import java.io.IOException;
5 import java.io.ObjectInputStream;
6 import java.io.ObjectOutputStream;
7 import java.io.Serializable;
8
9 //创建要写入磁盘的类,这个类需要实现接口 Serializable(可系列化的)
10 class Student implements Serializable{
11
12 // 在这里保证了serialVersionUID 的唯一性,防止属性变量的临时改变,从而造成写入id与读取id不同
13 private static final long serialVersionUID = 1L;
14 int id ; //额外需要添加一个属性
15
16 String name ;
17 transient String sex; //transient修饰属性,表示暂时的,则这个属性不会被写入磁盘
18 transient int age;
19
20 public Student(String name,String sex,int age){
21 this.name = name;
22 this.sex = sex;
23 this.age = age;
24 }
25 }
26
27
28 public class objectIO {
29
30 /**
31 * @param args
32 * @throws IOException
33 * @throws ClassNotFoundException
34 */
35 public static void main(String[] args) throws IOException, ClassNotFoundException {
36 // TODO Auto-generated method stub
37
38 createObj();
39 readObj();
40 }
41
42 //(一)先写入对象
43 public static void createObj() throws IOException {
44 //1.创建目标路径
45 File file = new File("C:\\Users\\bg\\Desktop\\objTest.txt");
46 //2.创建流通道
47 FileOutputStream fos = new FileOutputStream(file);
48 //3.创建对象输出流
49 ObjectOutputStream objOP = new ObjectOutputStream(fos);
50 //4.创建类对象,并初始化
51 Student stu = new Student("玛丽苏", "男", 18);
52 //5.向目标路径文件写入对象
53 objOP.writeObject(stu);
54 //6.关闭资源
55 objOP.close();
56 }
57
58 //再读取对象
59 public static void readObj() throws IOException, ClassNotFoundException {
60 File file = new File("C:\\Users\\bg\\Desktop\\objTest.txt");
61 FileInputStream fis = new FileInputStream(file);
62 ObjectInputStream objIP = new ObjectInputStream(fis);
63 //读取对象数据,需要将对象流强制转换为 要写入对象的类型
64 Student stu = (Student)objIP.readObject();
65 System.out.println("\n name:"+stu.name+"\n sex:"+stu.sex+"\n age:"+stu.age);
66 objIP.close();
67 }
68
69 }

打印效果

 name:玛丽苏
sex:null //后面的这连个属性使用了 transient修饰
age:0

用到方法:writeObject(Object o);  //向磁盘写入对象

     readObject();  //读取磁盘的对象,注意这里需要强制类型

对象输入输出流的使用注意点:        1.如果想将一个对象写入到磁盘中,那么对象所属的类必须要进行序列化,实现Serializable 接口,Serializable接口没有任何方法 ,是一个标记接口        2.如果对象所属的类的成员变量发生改变,你在读取原来的对象是就会报错,如果想要解决报错,保证serialVersionUID是唯一。        3.如果你不想将某些信息存入到磁盘 就可以同过transient关键字修饰成员变量        4.如果一个类中引用了另外的一个类,那么另外的这个类也要实现Serializable接口。

如果:

  

JAVA基础——对象流的更多相关文章

  1. Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream)

    Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前我已经分享过很多的J ...

  2. Java基础-IO流对象之随机访问文件(RandomAccessFile)

    Java基础-IO流对象之随机访问文件(RandomAccessFile) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.RandomAccessFile简介 此类的实例支持对 ...

  3. Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream)

    Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.内存 ...

  4. Java基础-IO流对象之数据流(DataOutputStream与DataInputStream)

    Java基础-IO流对象之数据流(DataOutputStream与DataInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据流特点 操作基本数据类型 ...

  5. Java基础-IO流对象之打印流(PrintStream与PrintWriter)

    Java基础-IO流对象之打印流(PrintStream与PrintWriter) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.打印流的特性 打印对象有两个,即字节打印流(P ...

  6. Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream)

    Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.对象的序 ...

  7. java基础-IO流对象之Properties集合

    java基础-IO流对象之Properties集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Properties集合的特点 Properties类表示了一个持久的属性集. ...

  8. Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader)

    Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.字符缓冲流 字符缓冲流根据流的 ...

  9. Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream)

    Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在我们学习字 ...

随机推荐

  1. eclipse下清除项目的svn信息

    点击项目右键->Team->Disconnect 选择第一个即可

  2. C# 反射 设置实体属性

    C# 反射 设置实体属性 http://blog.csdn.net/cestarme/article/details/6548126 C#反射设置属性值和获取属性值 http://www.cnblog ...

  3. centos6中office及中文输入法安装 (转载)

           原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://xuxuezhe.blog.51cto.com/1636138/73 ...

  4. Linux下 SSH远程管理服务

    第1章 SSH基本概述 1.1 SSH服务协议说明 SSH 是 Secure Shell Protocol 的简写,由 IETF 网络工作小组(Network Working Group )制定 在进 ...

  5. sql server 分组排序

    环境: sql server 2012 语法 select ROW_NUMBER() over(partition BY 分组字段 order by 排序字段),* as rowNums from 表 ...

  6. python 面向对象三 访问权限 下划线 双下划线

    一.双下划线 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问. ...

  7. Linux之旅第一篇-目录结构及操作目录

    一.引言 Linux对java开发来说也是一项必备的技能,因为项目基本都是部署在Linux操作系统的服务器中,虽然项目不一定需要我们去部署,但不管是自己测试环境部署,还是一些生产环境中日志的查看,Li ...

  8. 贪心+枚举/哈希表 HDOJ Trouble

    题目传送门 题意:5个集合,每个集合最多200个数字,问是否每个集合挑一个数加起来和为0. 分析:显然n^5的程序果断超时,甚至n^3logn的二分也过不了.想n^3的方法,既然判断有没有,那么可以将 ...

  9. 贪心/数学 Codeforces Round #212 (Div. 2) A. Two Semiknights Meet

    题目传送门 /* 贪心/数学:还以为是BFS,其实x1 + 4 * k = x2, y1 + 4 * l = y2 */ #include <cstdio> #include <al ...

  10. 题解报告:poj 1195 Mobile phones(二维BIT裸题)

    Description Suppose that the fourth generation mobile phone base stations in the Tampere area operat ...