Java——IO框架
IO框架
- 流:内存与存储设备之间传输数据的通道
- 分类
- 流向
- 输入流:从硬盘等外设到内存的流
- 输出流:从内存到硬盘等外设的流
- 传输单位
- 字节流(抽象类InputStream,OutputStream):以字节为单位,可以读写任何数据
- 字符流(抽象类Reader,Writer):以字符为单位,只能读写文本数据
- 功能
- 节点流:一般的流
- 过滤流FilterInputStream,FilterOutputStream:在节点流的基础上增强功能
- 流向
字节流
- 字节流的父类InputStream,OutputStream,并且是抽象类,读取文件和写入文件一般用FileInput/OutputStream
- 字节缓冲流:BufferedInputStream,BufferedInputStream
- 是过滤流的子类,所以是对节点流的功能的增强,需要用节点流(大多数情况都是FileInput/OutputStream)为基础来创建字节缓冲流
- 自带默认大小为8k的缓冲区
- 字节输出缓冲流的flush方法,是将缓冲区的内容写进硬盘
- 字节输出缓冲流的close方法自动执行flush方法
- 对象流:ObjectInputStream,ObjectOutputStream
- 主要方法:readObject,writeObject(Object obj)
- 从内存中向硬盘写入对象称为序列化,从硬盘中读出称为反序列化
- 增强了三个功能
- 缓冲区功能
- 读写八种基本数据类型和字符串功能
- 读写对象的功能
- ObjectOutputStream中要写入硬盘的对象的类必须实现可序列化接口(Serializable,只是一个标识性接口,代表可以序列化),类中对象的属性也要实现可序列化接口(比如类中属性也为类对象)
- 实现序列化接口的类最好声明一个serialVersionUID,序列化版本号id,保证序列化和反序列化的类是同一个类
- 使用transient(瞬间的)修饰的属性,不能被序列化
- 静态属性不能被序列化
- 序列化多个对象,可以借助集合实现
字符流
- 字符编码:
- 国际通用UTF-8,几乎收录了所有国家的常用字符,长度可变,可以是1,2,3字节
- 国内使用GBK
- 当编码方式与解码方式不一致时,会出现乱码,即写文件和读文件要用相同的编码方式
- 字符流的父类Reader(主要方法read),Writer(主要方法write,append,flush),并且是抽象类,读取文件和写入文件一般用FileReader/Writer
- 字符缓冲流:BufferedReader,BufferedWriter
- 自带8k缓冲区,高效读写
- 支持输入换行符
- 可一次写一行,读一行
- 重要方法,readLine,newLine
- 是过滤流的子类,所以是对节点流的功能的增强,需要用节点流(大多数情况都是FileReader/Writer)为基础来创建字节缓冲流
特殊的流
- PrintWriter:打印用的,方法大多是print开头的,不需要节点流做基础
- 转换流:又叫桥转换流,InputStreamReader,OutputStreamWriter
- 可将字节流转化为字符流
- 可以设置字符的编码方式(之前的类使用的是默认编码方式)
Java——IO框架的更多相关文章
- java IO框架分析
jave.io框架 2010-11-10 22:18:34| 分类: 默认分类|举报|字号 订阅 可从IO的类层次,IO框架的设计模式来论述. 总体来说,IO可以分为字节流和字符流,不同在于 ...
- java IO 框架图
- JAVA IO 序列化与设计模式
➠更多技术干货请戳:听云博客 序列化 什么是序列化 序列化:保存对象的状态 反序列化:读取保存对象的状态 序列化和序列化是Java提供的一种保存恢复对象状态的机制 序列化有什么用 将数据保存到文件或数 ...
- java io系列01之 "目录"
java io 系列目录如下: 01. java io系列01之 "目录" 02. java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括 ...
- Java最重要的21个技术点和知识点之JAVA集合框架、异常类、IO
(三)Java最重要的21个技术点和知识点之JAVA集合框架.异常类.IO 写这篇文章的目的是想总结一下自己这么多年JAVA培训的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享 ...
- Java基础之IO框架
一.流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部文件等. ...
- java.io包的总体框架图(转)
原文链接:java.io包的总体框架图, 便于记忆!
- Java三大框架之——Hibernate关联映射与级联操作
什么是Hibernate中的关联映射? 简单来说Hibernate是ORM映射的持久层框架,全称是(Object Relational Mapping),即对象关系映射. 它将数据库中的表映射成对应的 ...
- java 持久框架mybatis的初步学习
什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索.MyBati ...
- (转)Java集合框架:HashMap
来源:朱小厮 链接:http://blog.csdn.net/u013256816/article/details/50912762 Java集合框架概述 Java集合框架无论是在工作.学习.面试中都 ...
随机推荐
- lwl-resume 个人简历编辑使用说明
LWL RESUME 是一个简洁.可自定义生成pdf的在线简历编辑工具! 如果你喜欢这种简约格式的简历风格,可以尝试用它来编辑简历 . 注意事项 不支持手机端编辑!请务必使用最新版Chrome(谷歌浏 ...
- 【力扣】2400. 恰好移动 k 步到达某一位置的方法数目
题目 2400. 恰好移动 k 步到达某一位置的方法数目 解题思路 观察上面示例,容易画出下面的递归树,因此可以考虑DFS. DFS 很容易写出DFS的代码 class Solution { int ...
- Quartz 使用教程
首先说说,为什么要写这篇文章: Quartz 的 v2.3.2 版本改动比较大,目前网上的资料都是旧版本,很缺乏相关资料 很多资料讲解非常不全面,例如 Quartz Listener 的介绍和使用基本 ...
- Flutter新版本2.X系列--01创建项目
1.新建项目,打开Android studio,点击红圈部分 2.选择第一个 3.设置你的项目名称,flutter sdk位置,以及项目存储路径 4.设置包名,这个要唯一 5.好啦 ~ 作为一名前端开 ...
- PHP转Go实践:xjson解析神器「开源工具集」
前言 近期会更新一系列开源项目的文章,新的一年会和大家做更多的开源项目,也欢迎大家加入进来. xutil 今天分享的文章源自于开源项目jinzaigo/xutil的封装. 在封装过程中,劲仔将实现原理 ...
- Java微服务随机掉线排查思路
背景 我们的业务共使用11台(阿里云)服务器,使用SpringcloudAlibaba构建微服务集群,共计60个微服务,全部注册在同一个Nacos集群 流量转发路径: nginx->spring ...
- 服务器搭建(CenOS 7 Apache + PHP _Mysql环境(LAMP))
服务器搭建(CenOS 7 Apache + PHP _Mysql环境(LAMP)) 第一步.更换阿里云 yum源 curl -o /etc/yum.repos.d/CentOS-Base.repo ...
- 浅析 SeaweedFS 与 JuiceFS 架构异同
SeaweedFS 是一款高效的分布式文件存储系统,最早的设计原型参考了 Facebook 的 Haystack,具有快速读写小数据块的能力.本文将通过对比 SeaweedFS 与 JuiceFS 在 ...
- 构建api gateway之 openresty 中如何使用 wasm
openresty 中如何使用 wasm WASM 是什么? WebAssembly是一种运行在现代网络浏览器中的新型代码,并且提供新的性能特性和效果.它设计的目的不是为了手写代码而是为诸如C.C++ ...
- QQ、微信、微博、空间等分享链接接入
一.HTMl代码 1.隐藏标签用于获取信息 <img style="display:none" id="coverImage" src="@it ...