为了让对象持久化(把对象存储到本地),可以使用java的对象流处理对象,把对象的内容写到本地存储的文件中,也可以从本地文件中读取出来。也就是常说的序列化和反序列化

主要用到了ObjectInputStream(对象输入流)   ObjectOutPutStream(对象输出流 )处理对象

使用对象流处理对象进行持久化的顺序是,先创建目标路径,然后创建流通道,之后调用对象流

以下代码声明了两个类分别是Student,Teacher,都有三个属性,在创建对象的时候赋值

代码:

package demo_io;

import java.io.*;

public class Test {
public static void main(String[] args) { Student s = new Student(1001, "lisi", "男");
Teacher t = new Teacher(1, "s", "girl");
print(s,t);
out();
} public static void print(Student s,Teacher t) {
//声明一个文件(创建文件)
File file = null;
//声明文件输出字节流
FileOutputStream fos = null;
//声明对象处理流
ObjectOutputStream oos = null;
try {
file = new File("E:\\a.txt");
fos = new FileOutputStream(file);
oos = new ObjectOutputStream(fos);
//向文件中写入对象的数据
oos.writeObject(s);
oos.writeObject(t);
//清空缓冲区
oos.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
//关闭资源
fos.close();
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} public static void out() {
File file = null;
FileInputStream fis = null;
ObjectInputStream ois = null;
try {
file = new File("E:\\a.txt");
fis = new FileInputStream(file);
ois = new ObjectInputStream(fis);
Student s = (Student) ois.readObject();
Teacher t = (Teacher) ois.readObject();
System.out.println(s.toString());
System.out.println(t.toString());
} 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();
}
}
} }
//创建一个可以序列化的类,必须实现Serializable接口,接口中没有任何方法,只是一个标记
class Student implements Serializable{
public int id;
public String name;
public String sex; public Student(int id, String name, String sex) {
this.id = id;
this.name = name;
this.sex = sex;
} @Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
'}';
}
}
//创建一个可以序列化的类,必须实现Serializable接口,接口中没有任何方法,只是一个标记
class Teacher implements Serializable{
public int id;
//声明一个暂时的属性,用transient标记的属性不被序列化,不能被写入磁盘
public transient String name;
public String sex; public Teacher(int id, String name, String sex) {
this.id = id;
this.name = name;
this.sex = sex;
} @Override
public String toString() {
return "Teacher{" +
"id=" + id +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
'}';
}
}
writeObject(Object o);  //向磁盘写入对象

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

以下是在本地的文件中的数据(出现乱码),它不是简单的把对象属性值写入IO流中,而是按照一定的数据格式写入的。而这种格式,不是记事本、写字板、Word等文本编辑器能够识别的,因为,这些数据,压根就不是文本数据。只有使用相同版本的Java的ObjectInputStream来进行读取操作。

sr demo_io.Student聇鋏Knb I idL namet Ljava/lang/String;L sexq ~ xp  閠 lisit 鐢穝r demo_io.Teacher?椮嗲Wm I idL nameq ~ L sexq ~ xp   t st girl

实际输出:因为Teacher中的name用transient修饰的属性,所以不能被保存

Student{id=1001, name='lisi', sex='男'}
Teacher{id=1, name='null', sex='girl'}

在使用流的时候,注意要清空缓冲区,还有就是最后要关闭流,如果你不想将某些信息存入到磁盘 就可以同过transient关键字修饰成员变量,想要序列化必须要实现Serializable接口,这个接口中没有任何方法,只是标记告诉虚拟机这个类要序列化。

Java对象流的使用的更多相关文章

  1. java --对象流与对象的序列化

    对象流 ObjectInputStream ObjectOutputStream类分别是InputStream和OutputStream的子类,对象输出流使用writeObject(Object ob ...

  2. 动车上的书摘-java对象流与序列化

    摘要: 摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 钢笔不限贵便宜,书法是来自心对手的交流.-泥沙砖瓦浆木匠 一.对 ...

  3. java对象流(一)

    注意:字节数组流是可以不用关闭的(字符数组流要不要关闭暂时不清楚). 对象流的读数据和写数据方法分别是writeObject(Object o)和readObject(Object o). Objec ...

  4. java对象流(二)

    对象流,可以将java中的对象转为字节进行输出.将对象写入文件时.文件输出流是将字节写入到文件中. 对象流是将给定的对象转化为一组字节.writeObject()方法就是将对象转为字节. 对象流,读的 ...

  5. java 对象流的简单使用

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

  6. Java对象流与序列化学习

    对象流与序列化 对象流有两个类 ObjectOutputStream:将java对象的基本数据类型和图形写入OutputStream ObjectInputStream:对以前使用ObjectOutp ...

  7. java对象流与序列化

    Object流,直接把obj写入或读出. 前言: 比如 画图的程序,咣当画一个三角形出来,咣当画一正方形出来.然后存盘,当你下次再打开软件的时候三角形.方块还在原来的位置上.如果用面向对象的思维,三角 ...

  8. java 对象流

    TV.java import java.io.*; public class TV implements Serializable{ String name; int price; public vo ...

  9. Java自学-I/O 对象流

    Java 对象流 ObjectInputStream,ObjectOutputStream 对象流指的是可以直接把一个对象以流的形式传输给其他的介质,比如硬盘 一个对象以流的形式进行传输,叫做序列化. ...

随机推荐

  1. Luogu P1078 文化之旅

    题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不同的国家可能有相同的文化.不同文化 ...

  2. UART知识总结

    一.定义 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART. 二.时序 上图是uart协议传输一个"A" ...

  3. openstack-ocata-环境准备1

    Openstack环境准备1. 最少两台机器2. Controller:1核cpu 4G内存 5G硬盘3. Computer:1核cpu 2G内存 10G硬盘4. 至少两个网卡,本次采用四个网卡(1网 ...

  4. 我的Java设计模式-观察者模式

    相信大家都有看过<喜洋洋与灰太狼>,说的是灰太狼和羊族的"斗争",而每次的结果都是灰太狼一飞冲天,伴随着一句"我还会回来的......".为灰太狼感 ...

  5. 实战DeviceIoControl 之二:获取软盘/硬盘/光盘的参数

    Q 在MSDN的那个demo中,将设备名换成"A:"取A盘参数,先用资源管理器读一下盘,再运行这个程序可以成功,但换一张盘后就失败:换成"CDROM0"取CDR ...

  6. PHPmysqli的 预处理执行查询语句

    header( 'Content-Type:text/html;charset=utf-8 '); require 'prepareSrarment.php'; $mysqli=new mysqli( ...

  7. HighCharts之2D颜色阶梯饼图

    HighCharts之2D颜色阶梯饼图 1.实例源码 PieGradient.html: <!DOCTYPE html> <html> <head> <met ...

  8. 错误代码: 1327 Undeclared variable: p_film_count

    1.错误描述 1 queries executed, 0 success, 1 errors, 0 warnings 查询:SELECT FOUND_ROWS() INTO p_film_count ...

  9. 错误代码: 1045 Access denied for user 'skyusers'@'%' (using password: YES)

    1. 错误描述 GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "."; 1 queries exe ...

  10. iOS - MFi 认证

    1.MFi 认证 1.1 什么是 MFi 认证 苹果 MFi 认证,是苹果公司(Apple Inc.)对其授权配件厂商生产的外置配件的一种标识使用许可,是 Apple 公司 "Made fo ...