JAVA基础——对象流
对象的输入输出流的作用: 用于写入对象 的信息和读取对象的信息。 使得对象持久化。 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基础——对象流的更多相关文章
- Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream)
Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前我已经分享过很多的J ...
- Java基础-IO流对象之随机访问文件(RandomAccessFile)
Java基础-IO流对象之随机访问文件(RandomAccessFile) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.RandomAccessFile简介 此类的实例支持对 ...
- Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream)
Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.内存 ...
- Java基础-IO流对象之数据流(DataOutputStream与DataInputStream)
Java基础-IO流对象之数据流(DataOutputStream与DataInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据流特点 操作基本数据类型 ...
- Java基础-IO流对象之打印流(PrintStream与PrintWriter)
Java基础-IO流对象之打印流(PrintStream与PrintWriter) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.打印流的特性 打印对象有两个,即字节打印流(P ...
- Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream)
Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.对象的序 ...
- java基础-IO流对象之Properties集合
java基础-IO流对象之Properties集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Properties集合的特点 Properties类表示了一个持久的属性集. ...
- Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader)
Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.字符缓冲流 字符缓冲流根据流的 ...
- Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream)
Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在我们学习字 ...
随机推荐
- javascript 中==与===
1.==相等运算符 1.1如果操作数具有相同的类型,则判断其等同性,如果两个数的值相等,则返回true(相等),否则返回 false (不相等) 1.2如果两个操作数类型不同,则按如下规则: null ...
- VS2010打包回顾
1. 在vs2010 选择“新建项目”à“ 其他项目类型”à“ Visual Studio Installerà “安装项目”: 命名为:Setup1 . 这是在VS2010中将有三个文件夹, 1. ...
- 10款Web开发最佳的Python框架
Python是跻身于当代IT世界最流行和代码最高效的编程语言之一.Python框架能帮助你快速启动Web应用. 1.CubicWeb CubicWeb的最重要的功能是其代码的可重用性,由一个个代码单元 ...
- bzoj 3329: Xorequ【数位dp+矩阵乘法】
注意第一问不取模!!! 因为a+b=a|b+a&b,a^b=a|b-a&b,所以a+b=a^b+2(a&b) x^3x==2x可根据异或的性质以转成x^2x==3x,根据上面的 ...
- Vim 插件的安装
Vim 自带了文本格式化,通过 gg=G 触发.但大数情况下不满足需求,对于特定语言,比如 JavaScript,需要安装相应的插件来实现. 插件的存在形式 Vim 插件以三种形式存在, 单个的 .v ...
- SpringBoot使用MongoDB
一.什么是MongoDB MongoDB是一个基于分布式文件存储的数据库,由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的 ...
- Qt对象模型之二:对象树与元对象系统
一.对象树的概念 Qt中使用对象树(object tree)来组织和管理所有的QObject类及其子类的对象.当创建一个QObject时,如果使用了其他的对象作为其父对象(parent),那么这个 Q ...
- 校赛F 比比谁更快(线段树)
http://acm.cug.edu.cn/JudgeOnline/problem.php?cid=1153&pid=5 题意:给你一个字符串,各两个操作: ch=0,[l,r]降序 ch=1 ...
- Tian Ji -- The Horse Racing HDU - 1052
Tian Ji -- The Horse Racing HDU - 1052 (有平局的田忌赛马,田忌赢一次得200块,输一次输掉200块,平局不得钱不输钱,要使得田忌得到最多(如果只能输就输的最少) ...
- Android推送服务(1)几种实现方式
1.几种常见的解决方案实现原理 1)轮询(Pull)方式:应用程序应当阶段性的与服务器进行连接并查询是否有新的消息到达,你必须自己实现与服务器之间的通信,例如消息排队等.而且你还要考虑轮询的频率,如果 ...