io流复习+代码演示

序列化和反序列化

1.序列化就是在保存数据时, 保存数据的值和数据类型
2.反序列化就是在恢复数据时, 恢复数据的值和数据类型
3.需要让某个对象支持序列化机制,则必须让其类是可序列化的,为了让某个类是可序列化的,该
类必须实现如下两个接口之一:
Serializable //这是一个标记接口,没有方法
Externalizable //该接口有方法需要实现,因此我们一般实现上面的Serializable接口

IO流的三种分类

第一种:输入流和输出流
按照流的流向来分,可以分为输入流和输出流。输入,输出都是从程序运行所在内存的角度来划分的。
输入流:只能从中读取数据,而不能向其写入数据,由InputStream和Reader作为基类。
输出流:只能向其写入数据,而不能从中读取数据。由OutputStream和Writer作为基类

第二种:字节流和字符流
字节流和字符流的用法几乎完全一样,区别在于字节流和字符流所操作的数据单元不同。
字节流操作的数据单元是8位字节,由InputStream和OutputStream作为基类。
字符流操作的数据单元是16位的字符,由Reader和Writer作为基类

第三种:节点流和处理流
按照流的角色来分,可以分为节点流和处理流。
节点流:可以从向一个特定的IO设备(如磁盘、网络)读/写数据的流。也被称为低级流。
处理流:用于对一个已存在的流进行连接或封装,通过封装后的流来实现数据读/写功能。也称为高级流

节点流和处理流的区别和联系
1.节点流是底层流/低级流,直接跟数据源相接。
2.处理流(包装流)包装节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入输出。
3.处理流(也叫包装流)对节点流进行包装,使用了修饰器设计模式,不会直接与数据源相连[模拟修饰器设计模式]

处理流的功能主要体现在以下两个方面:
1.性能的提高:主要以增加缓冲的方式来提高输入输出的效率。
2.操作的便捷:处理流可能提供了- -系列便捷的方法来一次输入输出大批量的数据,使用更加灵活方便

常见的处理流BufferedReader和BufferedWriter

在关闭处理流时,只关闭外层流即可

字节流通常用来处理二进制文件,视频,音频,图片

1、inputStream

注意先进行ObjectOutputStream 序列化到 D:\a.dat 文件中 然后才进行的反序列化

可以看到输出:

2、OutputStream

通常用来处理文本文件,更高效。

1、Reader

BufferedReader类中,有属性Reader,即可以封装一个节点流,该节点流可以是任意的,只要是Reader子类 (BufferedWriter也是一样的操作)

2、Writer

注意:FileWriter使用后,必须要关闭(close)或刷新(flush)流, 否则写入不到指定的文件!

load:加载配置文件的键值对到Properties对象
list:将数据显示到指定设备
getProperty(key):根据键获取值
setProperty(key,value):设置键值对到Properties对象
store:将Properties中的键值对存储到配置文件,在idea中,保存信息到配置文件,如果
含有中文,会存储为unicode码

1、Properties读取数据

2、Properties写入数据

1、字节流copy练习

2、缓冲字符流copy文本练习

BufferedReader和BufferedWriter 是按照字符操作的,不要去操作二进制文件(声音、视频、doc、pdf、图片等等),拷贝后的文件可能会造成文件损坏

3、缓冲字节流copy二进制文件(copy文本文件一样可以)

Original: https://www.cnblogs.com/yclblogs/p/15851496.html
Author: 阿龙同学
Title: io流复习+代码演示

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/588933/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 使用Swing的GUI编程

    Swing AWT:抽象窗口工具包,提供了一套与本地图形界面进行交互的接口,是Java提供的用来建立和设置Java的图形用户界面的基本工具 Swing以AWT为基础的,尽管Swin…

    Java 2023年6月6日
    051
  • 面试官:为什么 Spring 和 IDEA 都不推荐使用 @Autowired 注解??

    大家在使用IDEA开发的时候有没有注意到过一个提示,在字段上使用Spring的依赖注入注解 @Autowired后会出现如下警告 Field injection is not re…

    Java 2023年6月15日
    077
  • MyBatis创建第二个项目

    Mysql文件配置 配置pom.xml 创建数据库连接信息配置文件 db.properties 创建MyBatis核心配置文件 mybatis-config.xml 创建pojo实…

    Java 2023年6月5日
    059
  • 医院信息平台管理(医院信息集成平台)—— 概念扫盲

    引子 以患者电子病历的信息采集、存储和集中管理为基础,连接临床信息系统和管理信息系统的医疗信息共享和业务协作平台,是在区域范围支持实现以患者为中心的跨机构医疗信息共享和业务协同服务…

    Java 2023年5月29日
    095
  • 两个世界

    初次接触编程的时候,我用C++写了一个程序,向控制台输出Hello World。一时之间兴奋不已,觉得好生神奇。于是,编程的世界打开了,再也关不住。现在,让我们也以这样一个Hell…

    Java 2023年6月5日
    063
  • Spring简介

    ​ spring框架:spring是一个非常活跃的开源框架。基于IOC和aop来构架多层javaee系统,以帮助分离项目组件之间的依赖关系(解耦) 底层: 工厂模式+xml Spr…

    Java 2023年6月13日
    070
  • 实现线程的两种方式

    实现Runnable接口如果当前类 不仅要继承其他类( 非Thread类), 还要实现多线程,那么 只能通过当前类实现 Runnable接口来 创建Thread类对象。 实现Run…

    Java 2023年6月9日
    077
  • 关闭 Firefox 的 Ctrl/Cmd + 滚轮 缩放网页的设置

    在 Mac 上装了 Firefox 之后,时不时就会遇到滚轮滚着滚着就变成缩放网页了,点一下地址栏的缩放按钮又恢复正常。换 Safari 和 Chrome 一段时间后并没有遇到这样…

    Java 2023年6月5日
    073
  • 15.log4j.properties

    set log levels log4j.rootLogger = INFO,stdout,E out console log4j.appender.stdout = org.ap…

    Java 2023年6月13日
    066
  • centos7更改中文

    这是在CentOS7中设置,CentOS6的是在 .etc/sysconfig/i18n 配置文件下。在root用户下操作,使用 locale 命令查看语言环境,看到 LANG=e…

    Java 2023年6月16日
    059
  • Java基础语法02——流程控制

    流程控制:顺序结构、分支结构(if-else、switch-case)、循环结构(for、while、do-while) 实现从键盘获取不同类型的变量——Scanner类 步骤: …

    Java 2023年6月5日
    075
  • 并发Map类删除数据的问题java.lang.UnsupportedOperationException: null

    笔者最近在开发Websocket相关的消息推送服务,使用了JSR356规范,由于需要维持会话。于是分别使用了以下类 笔者在维护失效的代码写了以下代码 最终在调用clients.re…

    Java 2023年5月29日
    070
  • java.net.NoRouteToHostException: 没有到主机的路由

    今天在配置Jenkins 的云服务器的时候提示:java.net.NoRouteToHostException: 没有到主机的路由,网上查到的没有主机路由问题提到的大多是防火墙问题…

    Java 2023年5月29日
    062
  • Java连载155-IO总结(二)

    一、四种方式分别举例 1.FileInputStream   InputStream is =&#x…

    Java 2023年6月13日
    068
  • 全面理解Java内存模型(JMM)及volatile关键字(转载)

    关联文章: 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解Java类加载器…

    Java 2023年5月29日
    074
  • 给 Mac 添加右键菜单「使用 VSCode 打开」

    最终的实现效果是在文件 / 文件夹上右击时,会出现菜单项「用 VSCode 打开」,点击后会启动 Visual Studio Code 打开对应的文件 / 文件夹。 实现步骤 3….

    Java 2023年6月5日
    082
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球