[四] JavaIO之类层次体系结构横向比对
IO家族类层次体系结构横向匹配
| 数据源形式 | InputStream | OutputStream | Reader | Writer |
| ByteArray(字节数组) | ByteArrayInputStream | ByteArrayOutputStream | 无 | 无 |
| File(文件) | FileInputStream | FileOutputStream | FileReader | FileWriter |
| Piped(管道) | PipedInputStream | PipedOutputStream | PipedReader | PipedWriter |
| Object(对象) | ObjectInputStream | ObjectOutputStream | 无 | 无 |
| String | StringBufferInputStream | 无 | StringReader | StringWriter |
| CharArray(字符数组) | 无 | 无 | CharArrayReader | CharArrayWriter |
| 扩展功能点 | InputStream | OutputStream | Reader | Writer |
| Data(基本类型) | DataInputStream | DataOutputStream | 无 | 无 |
| Buffered(缓冲) | BufferedInputStream | BufferedOutputStream | BufferedReader | BufferedWriter |
| LineNumber(行号) | LineNumberInputStream | 无 | LineNumberReader | 无 |
| Pushback(回退) | PushbackInputStream | 无 | PushbackReader | 无 |
| Print(打印) | 无 | PrintStream | 无 | PrintWriter |
|
1.针对于各种数据源,四大家族的处理逻辑
|
| 2.扩展功能点的含义 |
IO数据源应用
|
字节数组,毫无疑问,不会应用在字符家族里面
他应用于 ByteArrayInputStream 以及 ByteArrayOutputStream
他的内部包含一个 字节数组 byte buf[]
ByteArrayInputStream 以及 ByteArrayOutputStream 内部维护了一个byte buf[]
会将数据读取到这个字节数组(缓冲区)
或者将数据写入到这个字节数组(缓冲区)
他们维护的是这个内部的字节数组本身,并不会写入文件
|
| 这两个类本质就是操纵字节数组,提供对字节数组的读取与写入 它的本质如同文件一样,都是用来存储数据 只不过是数据存在于内存中而已 通过将数据封装到内部的字符数组中,可以提供IO一致性的接口 |
| ByteArray 仅仅应用与字节流 |
| 前面说过,File 是最常见的一种数据形式 所以对IO提供针对文件的操作非常合理 我们知道,所有的数据存储最终都是字节的形式 但是对于文件的操作又是如此的频繁和重要 所以,针对于字符的输入输出也提供了对应的处理 不过还是那句话,最终文件都是字节形式存储,所以,对于字符文件,自然需要进行编码与解码 FilterReader每一次的读取都意味着一次解码 FilterWriter每一次的写入都意味着编码 |
| 既然是文件,我们前面介绍过File类 File类的构造主要由路径名或者文件描述符 所以对于文件的输入输出相关的IO操作,自然可以通过 路径名 文件描述符 或者File 本身作为目标对象 也就是说构造函数的参数一般都是这三者之一 |
| 对于文件的操作是实实在在的操作文件本身 File 四大家族都有应用 |
| 管道的概念,不是来自于java io很早前就有此概念 含义非常明朗,就如同他的名字一样,管道,好像两个水管连接起来,形成一个通道 这个通道是直接连接的,并不会再跑到别的地方去弯弯绕 管道流的主要作用是可以进行两个线程间的通讯 既然主要作用进行线程间的通讯,他就是传输数据使用的 IN 字节数组缓存数据,OUT使用IN对象
|
| 管道在四大家族中都有应用 |
|
ObjectInputStream 和 ObjectOutputStream 的作用是,对基本数据和对象进行序列化操作支持
ObjectOutputStream对象能提供对“基本数据或对象”的持久存储
ObjectInputStream,读取出这些“基本数据或对象”
只有支持 java.io.Serializable 或 java.io.Externalizable 接口的对象才能被ObjectInputStream/ObjectOutputStream所操作
|
| 序列化自然不可能就只有字符,所以Object仅仅针对字节家族 |
| 提供了对String类型的支持 reader读取到String writer写入到StringBuffer |
|
| StringBufferInputStream 已经不推荐使用了 所以,后续可以认为String仅仅支持字符家族 |
| 类似ByteArray,也是提供对字符数组的支持 操纵内存数据 |
![]() |
| 字符数组仅仅支持字符家族 |
IO扩展功能应用
| Data是对基本数据类型的支持 针对于DataOutputStream写出的数据文件 可以使用DataInputStream进行读取 也就是说是一种特殊形式的文件 |
| 他们底层依赖的还是字节流 通过继承FilterInputStream 和 FilterOutputStream 使用其中的InputStream in 以及 OutputStream out 这两个对象是通过构造方法传递进来的 |
| 缓冲也就是为了减少读取的频率,设置一个缓冲区 缓冲的概念到处都是,所以缓冲应用于四大家族 |
| LineNumber是针对输入的 所以存在于LineNumberInputStream和LineNumberReader 不过对于字节流的LineNumberInputStream 已经弃用 |
| LineNumberReader是一个跟踪行号的缓冲字符输入流 也很显然,流都是顺序读取不能回退的,所以想要读取行号自然要借助于缓存 他的实现继承BufferedReader 也很好理解 |
| Pushback 回退,也就是读取了一个字符,然后再次把它放回到流中 所以是针对输入的 PushbackInputStream PushbackReader 也是借助于内部的缓存
|
| 主要是为了提供数据打印的便利性 |
| 打印自然是针对于输出的 PrintStream PrintWriter |
[四] JavaIO之类层次体系结构横向比对的更多相关文章
- java.IO层次体系结构
在整个Java.io包中最重要的就是5个类和一个接口.5个类指的是File.OutputStream.InputStream.Writer.Reader:一个接口指的是Serializable.掌握了 ...
- 【转】花开正当时,十四款120/128GB SSD横向评测
原文地址:http://www.expreview.com/19604-all.html SSD横评是最具消费指导意义的评测文章,也是各类热门SSD固态硬盘的决斗疆场.SSD评测在行业内已经有不少网站 ...
- [十四]JavaIO之PrintStream
功能简介 PrintStream 为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式 装饰器模式中具体的装饰类 它提供的功能就是便捷的打印各种数据形式 FilterInputStrea ...
- [二十四]JavaIO之PrintWriter
功能简介 PrintWriter 向文本输出流打印对象的格式化表示形式 他与PrintStream的逻辑上功能目的是相同的--他们都想做同一件事情--更便捷的格式化打印输出 Print ...
- JSP九大内置对象及四个作用域
九大对象: 内置对象(又叫隐含对象,有9个内置对象):不需要预先声明就可以在脚本代码和表达式中随意使用 1-out: javax.servlet.jsp.JspWriter类型,代表输出流的对象.作用 ...
- 金三银四,如何征服面试官,拿到Offer
又到了茶余饭后的时间,想想写点什么,掐指一算,噢呦,快到3月份了,职场的金三银四跳槽季又来了,不同的是今年比往年「冷」一些,形式更加严峻一些,大家多多少少可能都听到或看到一些信息,就是好多公司在优化裁 ...
- java IO流 总结
[-] 1什么是IO 2数据流的基本概念 1 数据流 2 输入流Input Stream 3 输出流 数据流分类 3 标准IO 命令行参数 标准输入输出数据流 4javaIO层次体系结构 5 非流式 ...
- Java总结输入流输出流
学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群:618528494 我们一起学Java! 1.什么是IO Java中I/O操作主要是指使用 ...
- 学习笔记-java IO流总结 转载
1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.Java的I/O流提供了读 ...
随机推荐
- mysql的复习
. 着重号,区分字段和关键字的符号 +号是运算的 起别名,其中的as可以省略 ifnull(expr1,expr2),expr1代表输入的字段,expr2代表如果输入的字段是null则为expr2 条 ...
- TCP协议中是如何保证报文可靠传输的
1.什么是TCP的可靠传输 它向应用层提供的数据是无差错的.有序的.无丢失的,换言之就是:TCP最终递交给应用层的数据和发送者发送的数据是一模一样的. 2.TCP保证可靠传输的办法有哪些? TCP采用 ...
- 圆形进度条css3样式
<view class="con"> <view class="percent-circle percent-circle-left"> ...
- 使用jQuery.form库中ajaxSubmit提交表单时遇到的一些问题
初入前端,网上找的很多资料都不够详细,导致遇到很多问题,现记录如下: 1.首先引入 <script src="~/Scripts/jquery-1.10.2.js">& ...
- 二分- Count on Canton
题目: 代码: 是一个蛇形数列,把题目上的那组数倒过来看成一个正三角形. 第一行有1个数,1-2行有三个数,1-4行有6个数,1-4行有10个数,1-5行有15个数..... 现在要求第n个数是多少, ...
- 使用cAdvisor+Influxdb+Grafana监控系统
今天准备开始研究研究当前非常流行的Grafana+Influxdb监控系统,两者都是非常轻量级的应用但是功能却异常强大,可以说Grafana在作图显示方面真的毫不逊色与Cacti. 组件介绍 cA ...
- storm集群架构
一.storm何许人也? Storm 是Twitter的一个开源框架.Storm一个分布式的.容错的实时计算系统,它被托管在GitHub上,遵循 Eclipse Public License 1.0. ...
- [Swift]LeetCode20. 有效的括号 | Valid Parentheses
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...
- [Swift]LeetCode255.验证二叉搜索树的先序序列 $ Verify Preorder Sequence in Binary Search Tree
Given an array of numbers, verify whether it is the correct preorder traversal sequence of a binary ...
- 有了这 4 大特性,CDN 好用到飞起
随着 CDN 市场的快速发展和网络新技术的不断涌现,目前的 CDN 已不仅仅是当初简单的内容分发,同时也是新特性研发.新技术推广及实践的平台.这些新技术.新特性,或者能够保障 CDN 安全性,或是提升 ...
