·ObjectInputStream和ObjectOutputStream这两个包装类,用于从底层输入流中读取对象类型的数据和对象类型的数据写入到底层输出流。将对象中所有成员变量的取值保存起来就等于保存了对象,将对象中所有成员变量的取值还原就相等于读取了对象。

·ObjectInputStream和ObjectOutputStream类所读写的对象必须实现了Serializable接口。对象中的transient(一种标记,表示变量是临时的)和static类型的成员变量不会被读取和写入。这两个类可以用于网络流中传送对象。

( transient:Java语言的关键字,变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。

  Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用 serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。)

·一个可以被序列化的MyClass类的定义:

public class MyClass implements Serializable{

public transient Thread t;  //t不会被序列化

private String customerID;

private int total;

}

·编程举例:创建一个可序列化的学生对象,并用ObjectOutputStream类把它存储到一个文件(mytext.txt)中,然后再用ObjectInputStream类把存储的数据读取到一个学生对象中,即恢复保存的学生对象。

[java] view plaincopy
  1. import java.io.*;
  2. class Student implements Serializable //必须实现Serializable接口才能序列化
  3. {
  4. int age;
  5. String name;
  6. Student(int age, String name){
  7. this.age = age;
  8. this.name = name;
  9. }
  10. }
  11. public class Iotest {
  12. /**
  13. * @param args
  14. */
  15. public static void main(String[] args) {
  16. // TODO Auto-generated method stub
  17. Student stu1 = new Student(20,"zhangsan");
  18. Student stu2 = new Student(22,"lisi");
  19. try {
  20. FileOutputStream fos = new FileOutputStream("a.txt");
  21. ObjectOutputStream oos = new ObjectOutputStream(fos);
  22. oos.writeObject(stu1);
  23. oos.writeObject(stu2);
  24. oos.close();
  25. FileInputStream fis = new FileInputStream("a.txt");
  26. ObjectInputStream ois = new ObjectInputStream(fis);
  27. Student stu3 = (Student) ois.readObject();
  28. System.out.println("age: "+stu3.age);
  29. System.out.println("name: "+stu3.name);
  30. } catch (FileNotFoundException e) {
  31. // TODO Auto-generated catch block
  32. e.printStackTrace();
  33. } catch (IOException e) {
  34. // TODO Auto-generated catch block
  35. e.printStackTrace();
  36. } catch (ClassNotFoundException e) {
  37. // TODO Auto-generated catch block
  38. e.printStackTrace();
  39. }
  40. }
  41. }

·字节流与字符流的转换

·IO包中的流分为字节流和字符流,应用中经常需要互相转换。

·思考:能不能找到一种简单的方式来读取键盘上输入的一行字符?如何找?

A:查找readLine方法,再通过JDK中的see also寻找接收参数为System.in类型的类。

·InputStreamReader和OutputStreamWriter是用于将字节流转换成字符流来读写的两个类,InputStreamReader可以将一个字节流中的字节解码成字符后读取,OutputStreamWriter将字符编码成字节后写入到一个字节流中。

·避免频繁地在字符与字节间进行转换,最好不要直接使用InputStreamReader和OutputStreamWriter类来读写数据,应尽量使用BufferedWriter类来包装OutputStreamWriter类,用BufferedReader类来包装InputStreamReader.

JAVA IO系列----ObjectInputStream和ObjectOutputStream类相关推荐

  1. java io系列09之 FileDescriptor总结

    转载自    java io系列09之 FileDescriptor总结 FileDescriptor 介绍 FileDescriptor 是"文件描述符". FileDescri ...

  2. Java.io包中常用的类

    Java.io包 Java.io.BufferedInputStream类实例 Java.io.BufferedOutputStream类使用例子 Java.io.BufferedReader类 Ja ...

  3. Java IO系列之字节流拷贝文件性能比较

    Java IO 字节流基类 InputStream--输入流, OutPutStream--输出流, 输入流用于读,输出流用于写. 字节流默认一次只读取或输出一个字节. package jonavin ...

  4. Java IO 系列(01)-Java IO概述

    为什么80%的码农都做不了架构师?>>>    1. 引言 趁着有时间,看了下JDK1.7 API 对Java.lang.io包下经常用到的Java IO处理类做了一些总结性的东西, ...

  5. Java IO Path接口和Paths类

    public final class Paths extends Object 此类仅由静态方法组成,通过转换路径字符串返回Path或URI . static Path get(String firs ...

  6. java io系列10之 FilterInputStream

    FilterInputStream 介绍 FilterInputStream 的作用是用来"封装其它的输入流,并为它们提供额外的功能".它的常用的子类有BufferedInputS ...

  7. java io流 file_JavaIO流-File类

    ### String getName() 获取文件名字 > filename.txt ### String getParent() 获取父文件的路径 > 根据传入字符串确定,比如: > ...

  8. Java IO: 序列化与ObjectInputStream、ObjectOutputStream

    转载自  Java IO: 序列化与ObjectInputStream.ObjectOutputStream 作者:Jakob Jenkov  译者: 李璟(jlee381344197@gmail.c ...

  9. Java IO流以及File类

    目录 File类概述 File类常用方法 IO流 io流分类 Writer字符输出流 覆盖写入 追加写入 Reader字符输入流 字节流 字节输出流 覆盖写入 字符输入流 文件的拷贝 字符流文件的拷贝 ...

最新文章

  1. oracle中 关于触发器,oracle 闪回关于触发器的bug
  2. 周末一起用文本数据库玩玩Code First
  3. Docker Machine-Windows
  4. wxWidgets:wxModalDialogHook类用法
  5. Windows导出所有计划任务方法
  6. mysql load average_紧急求助:load average太高了!!
  7. STM32 USB数据接收与数据发送程序流程分析
  8. PyTorch:模型训练和预测
  9. idea下载github代码及切换分支
  10. Struts2(三)
  11. python最强脚本工具_python脚本工具最百里自瞄
  12. 支撑 100Gbit/s K8s 集群的未来网络数据平面
  13. Gi常用命令大全整理
  14. 【课设分享】基于51单片机的恒温控制器系统
  15. Unity制作简单拦截近防炮——如何预测打击目标
  16. skywalking内部测试服务器安装记录
  17. 拉仇恨!李想靠微博股票赚了两三倍,只有千把万
  18. MATLAB学习实例
  19. 数据名称:中国健康与养老追踪调查数据(CHARLS)数据时间跨度:2008-2018年中国健康与养老追踪调查(China Health and Retirement Longitudinal St
  20. oracle mrp全称,【简答题】MRP和MRP2的中文和英文全称分别是什么? (20.0分)

热门文章

  1. WinRAR 6.0 官方版 非常强大好用的压缩包管理器
  2. java crs校验_AIX系统学习之-CRS安装后校验
  3. 私人心情录小程序源码
  4. Chameleon Install3.0变色龙windows安装程序
  5. QQ网页登陆密码加密方式(农场、空间、WebQQ等通用)
  6. c# 中如何设置combox 让出现text value两个值 winform开发
  7. Ubuntu中useradd和adduser的区别
  8. 在Windows环境下用Editplus打造一个Python编辑调试环境
  9. PHP常用字符串函数
  10. 最速下降法和牛顿方法的Python实现和MATLAB实现