一、数据流

1、数据简介

数据流将“基本数据类型字符串类型”作为数据源,从而允许程序以与机器无关的方式从底层输入输出流中操作Java基本数据类型与字符串类型。

DataInputStreamDataOutputStream 提供了可以存取与机器无关的所有 Java 基础类型数据(如:int、double、String等)的方法。DataInputStream 和 DataOutputStream 是处理流,可以对其他节点流或处理流进行包装,增加一些更灵活、更高效的功能。只针对字节流(二进制文件)。

2、DataInputStream 和 DataOutputStream 的使用

public class TestDataStream2 {public static void main(String[] args) {DataInputStream dis = null;DataOutputStream dos = null;try {//使用数据流对缓冲流进行包装,新增缓冲功能dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("E:/data.txt")));dis = new DataInputStream(new BufferedInputStream(new FileInputStream("E:/data.txt")));//将如下数据写入到文件中dos.writeInt(97);dos.writeDouble(3.14);dos.writeBoolean(true);dos.writeChar('a');dos.writeUTF("hello");//手动刷新缓冲区:将流中的数据写入到文件中!!!dos.flush();//直接读取数据:读取顺序要和写入的顺序一致System.out.println("int:" + dis.readInt());System.out.println("double:" + dis.readDouble());System.out.println("boolean:" + dis.readBoolean());System.out.println("char:" + dis.readChar());System.out.println("String:" + dis.readUTF());} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {try {if(dos != null)dos.close();if(dis != null)dis.close();} catch (IOException e) {e.printStackTrace();}}}
}

运行结果:

注意:数据流的读写顺序必须一一对应。

二、对象流

我们前边学到的数据流只能实现对基本数据类型和字符串类型的读写,并不能读取对象(字符串除外),如果要对某个对象进行读写操作,我们需要学习一对新的处理流:ObjectInputStream / ObjectOutputStream

1、对象流简介

ObjectInputStream / ObjectOutputStream 是以“对象”为数据源,但是必须将传输的对象进行序列化与反序列化操作。序列化以后的对象可以保存到磁盘上,也可以在网络上传输, 使得不同的计算机可以共享对象。(序列化的字节序列是平台无关的)

2、序列化涉及的类和接口

  • ObjectOutputStream代表对象输出流,它的writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。
  • ObjectInputStream代表对象输入流,它的readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。

只有实现了Serializable接口的类的对象才能被序列化。Serializable接口是一个空接口,只起到标记作用。如果对象的属性是对象,属性对应类也必须实现 Serializable 接口

public class Person implements Serializable{private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Person(String name, int age) {this.name = name;this.age = age;}public Person() {}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + "]";}
}

3、ObjectInputStream / ObjectOutputStream 的使用

public class TestObjectStream { public static void main(String[] args) {//先写后读write();read();}/** 使用对象输入流将数据读入程序 */public static void read() {//1、创建对象流对象ObjectInputStream ois = null;try {ois = new ObjectInputStream(new FileInputStream("E:/person.txt"));//2、读取对象System.out.println(ois.readInt());System.out.println(ois.readUTF());System.out.println((Date)ois.readObject());Person p = (Person) ois.readObject();System.out.println(p);} catch (ClassNotFoundException | IOException e) {e.printStackTrace();}finally {//3、关闭流try {if(ois != null)ois.close();} catch (IOException e) {e.printStackTrace();}}System.out.println("读取完毕!");}/** 使用对象输出流将数据写入文件 */ public static void write() {//1、创建对象流对象ObjectOutputStream oos = null;try {oos = new ObjectOutputStream(new FileOutputStream("E:/person.txt"));//2、写对象:与写入顺序一致oos.writeInt(97);oos.writeUTF("Hello");oos.writeObject(new Date());oos.writeObject(new Person("Tom", 23));} catch (IOException e) {e.printStackTrace();}finally {//3、关闭流try {if(oos != null)oos.close();} catch (IOException e) {e.printStackTrace();}}System.out.println("写出完毕!");}
}

运行结果:

注意:

1. 对象流不仅可以读写对象,还可以读写基本数据类型。

2. 使用对象流读写对象时,该对象必须序列化与反序列化。

3. 系统提供的类(如Date等)已经实现了序列化接口,自定义类必须手动实现序列化接口。

知乎视频​www.zhihu.com

知乎视频​www.zhihu.com

对象必须实现 iconvertible_Java I/O 流之数据流_对象流相关推荐

  1. .dat文件写入byte类型数组_文件字节流、文件字符流、缓冲字节流、缓冲字符流字节数组流、数据流、转换流、对象流...

    一.实操名称: 描述如下流的基本作用:文件字节流.文件字符流.缓冲字节流.缓冲字符流字节数组流.数据流.转换流.对象流二.描述1.文件字节流:包括:FileInputStream,FileOutput ...

  2. 【Java I/O流】File、字符集、字节流、字符流、缓冲流、数据流、对象流、序列化、try-with-resources语句

    I/O流 File File 常用方法 File 练习:搜索.删除.剪切 字符集(Character Set) 字符编码(Character Encoding) 字符编码比较 乱码 try-with- ...

  3. 旅游流的概念_旅游流概念的研究的探讨.doc

    旅游流概念的研究的探讨 旅游流概念的研究的探讨 摘 要:文章在比较分析各类旅游流定义研究的基础上,确定了旅游流的定义,区别了旅游流与旅游者个体综合:论述了旅游流的特征和影响因素,特别提出了旅游流的周期 ...

  4. 旅游流的概念_旅游流

    旅游流(Tourist Flows) [編輯] 什麼是旅游流 旅游流是在一個或大或小的區域上,由於旅游需求的近似性而引起的旅游者集體性空間移動現象.這個定義比較好地把握住了形成旅游流的主要矛盾.特征和 ...

  5. 四十三、深入Java中的数组流,数据流和对象流操作

    @Author:Runsen @Date:2020/6/8 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

  6. 捡对象引流脚本 内容_对象和索引流

    捡对象引流脚本 内容 我本来要写一篇关于如何将流与每个元素的索引混合的文章,但是Baeldung上的人们已经很好地涵盖了这个主题 ! 鉴于我是他们编辑团队的一员,我为他们/我们感到自豪. 有趣的是,特 ...

  7. 旅游流的概念_旅游流的概念界定与理论内涵新论

    旅游流的概念界定与理论内涵新论 陈海波 [摘 要] 摘要:在借鉴和思考的基础上,将旅游流界定为:旅游者在一次旅游 活动中所产生的位移为零的空间移位现象.对当前旅游流的流质.流势.流向 等观察维度进行了 ...

  8. 计算书 轴流式止回阀_轴流式止回阀的制作方法

    轴流式止回阀的制作方法 [技术领域] [0001 ] 本实用新型涉及一种阀门,更具体地说,它涉及一种轴流式止回阀. [背景技术] [0002]轴流式止回阀以其运行平稳,流阻小,水击压力小,流态好,对介 ...

  9. Java IO流大闯关--IO流的常用实现类

    这个系列的博客主要是对Java高级编程中IO流相关的知识点做一个梳理,内容主要包括File类.IO流原理及流的分类.文件流.缓冲流.转换流.标准输入输出流.打印流.数据流.对象流.随机存取文件流.NI ...

最新文章

  1. c语言读取一个图像文件格式,求指导,如何用c语言实现读取*.raw格式图像
  2. 【深度学习】真正的即插即用!盘点11种CNN网络设计中精巧通用的“小”插件...
  3. 每日程序C语言24-回文数字的判断
  4. C++中流状态badbit, failbit, eofbit
  5. 华为交换机的配置及:access、trunk、hybird端口详解
  6. Java多线程与网络编程综合使用
  7. js 中声明变量 “提前”
  8. 浏览器获取设备信息_一条命令获取 IE 浏览器保存网站的账号和密码信息
  9. mysql慢查询分析工具和分析方法
  10. C++函数的返回值是指针
  11. python3入门与进阶笔记_【基础】学习笔记6-python3 Turtle库_实操进阶3
  12. EasyRecovery解救打工人的崩溃
  13. 字符串替换(NYOJ)
  14. C++ 读取txt文件方法读取速度比较
  15. 使用脚本把360极速浏览器修改为极速模式
  16. pytorch_预训练Se_resnet50_自定义类别数量_源码分享
  17. 数据库软件设计(8684)
  18. 富兰克林的风筝实验中的秘密
  19. font-face使用的web字体格式介绍、浏览器兼容和字体转换
  20. Python itchat模块报错:为了你的帐号安全,此微信号不能登录网页微信。你可以使用Windows微信或Mac微信在电脑端登录。

热门文章

  1. Centos7 修改运行级别
  2. SharePoint2013自定义登录页面
  3. The bag-of-words model
  4. 5款没有专利纠葛的Linux发行版
  5. 游戏杆编程心得二:如何判断按钮的有效按下
  6. atoi,atol,strtod,atof
  7. 攻击NLP模型:通用对抗触发器入门
  8. How to Make a Computer Operating System
  9. [转发]R语言数据挖掘实践——使用party包构建决策树
  10. POJ 2104 K-th Number