[二十六]JavaIO之再回首恍然(如梦? 大悟?)
流分类回顾
数据源形式 | 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(行号) | 无 | LineNumberReader | 无 | |
Pushback(回退) | PushbackInputStream | 无 | PushbackReader | 无 |
Print(打印) | 无 | PrintStream | 无 | PrintWriter |
流分为输入输出流两种形式
数据格式又分为字节和字符两种形式
他们组合而来了四大家族
InputStream OutputStream Reader Writer
|
所有的四大家族的流有两种合成扩展方式: 按照数据源形式扩展 按照装饰功能点扩展 |
数据源形式扩展
数据源扩展的根本 |
从这种形式的数据中读取数据 写入数据到这种数据形式 |
ByteArray 内存数据 |
|
CharArray 内存数据 |
|
String 内存数据 |
|
读--->从哪里读?--->你给我一个数据源--->我以IO的操作习惯(InputStream/Reader) 读给你 |
写--->IO的操作习惯写(OutputStream/Writer) --->写到哪里?--->写到我自己内部的存储里
|
内存数据,如果仅仅是存起来放到他自己肚子里面当然毛用没有
但是,他们都提供了吐出来的功能了
给[字节数组 字符数组 String] 提供了一个统一的一致性的读写形式,操作非常方便,不是么
|
pipe 管道用于直连 然后进行数据的传输 主要用于多线程数据共享 In 输入管道里面有一个存储区 Out 输出管道内有个In的引用 Connect之后,In指向了某个实际的 输入流 然后Out通过引用操作In里面的存储区 In自己的读方法也是操作这个存储区 ![]() |
Pipe |
|
所以一旦理解了,JavaIO管道的模型,管道就实在是太简单了![]() |
只需要记住: 输入In里面 有一个存储缓冲区, 输出有一个引用指向了In connect将他们连接起来,他们共同操作一个池子 输出往里面写,输入从里面读 管子的方向只能是 : 输出 -----> 输入 |
文件相关的,都是实实在在的要通过操作系统了 所以也就必然需要使用本地方法 在Java中一个文件使用File来描述,File是抽象路径名 可以表示文件 也可以表示目录 File可以通过String路径名构造 另外还有文件描述符可以表示指代文件 |
File 磁盘数据 |
|
File
磁盘数据
|
|
Reader reader = new InputStreamReader( new FileInputStream(.......));
Writer writer = new OutputStreamWriter( new FileOutputStream(.......));
|
是你还有你,一切拜托你,中间增加点功能 |
Data |
|
Buffered |
|
LineNumberReader 内部使用了一个lineNumber = 0; 用来记录行号 这个行号可以使用方法设置和获取 getLineNumber setLineNumber 但是他不改变流的位置 |
PushbackInputStream |
继承自FilterInputStream 得到一个InputStream 引用in 构造方法需要 InputStream 内部有缓冲区byte[] buf |
FilterReader | 继承自FilterReader 得到一个Reader引用 in 构造方法需要一个Reader 内部有缓冲区char[] buf |
PrintStream | 继承自 FilterOutputStream得到一个OutputStream 引用 out 构造需要一个OutputStream |
PrintWriter | 内部有一个out 构造方法需要一个Writer |
总结
?
[二十六]JavaIO之再回首恍然(如梦? 大悟?)的更多相关文章
- WCF技术剖析之二十六:如何导出WCF服务的元数据(Metadata)[扩展篇]
原文:WCF技术剖析之二十六:如何导出WCF服务的元数据(Metadata)[扩展篇] 通过<实现篇>对WSDL元素和终结点三要素的之间的匹配关系的介绍,我们知道了WSDL的Binding ...
- VMware vSphere 服务器虚拟化之二十六 桌面虚拟化之View Persona Management
VMware vSphere 服务器虚拟化之二十六 桌面虚拟化之View Persona Management 实验失败告终,启动VMware View Persona Management服务报10 ...
- 二十六个月Android学习工作总结【转】
原文:二十六个月Android学习工作总结 1.客户端的功能逻辑不难,UI界面也不难,但写UI花的时间是写功能逻辑的两倍. 2.写代码前的思考过程非常重要,即使在简单的功能,也需要在本子上把该 ...
- 剑指Offer(二十六):二叉搜索树与双向链表
剑指Offer(二十六):二叉搜索树与双向链表 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/ ...
- FreeSql (二十六)贪婪加载 Include、IncludeMany、Dto、ToList
贪婪加载顾名思议就是把所有要加载的东西一次性读取. 本节内容为了配合[延时加载]而诞生,贪婪加载和他本该在一起介绍,开发项目的过程中应该双管齐下,才能写出高质量的程序. Dto 映射查询 Select ...
- 使用Typescript重构axios(二十六)——添加HTTP授权auth属性
0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...
- 深度学习(二十六)Network In Network学习笔记
深度学习(二十六)Network In Network学习笔记 Network In Network学习笔记 原文地址:http://blog.csdn.net/hjimce/article/deta ...
- Bootstrap <基础二十六>进度条
Bootstrap 进度条.在本教程中,你将看到如何使用 Bootstrap 创建加载.重定向或动作状态的进度条. Bootstrap 进度条使用 CSS3 过渡和动画来获得该效果.Internet ...
- Web 前端开发人员和设计师必读精华文章【系列二十六】
<Web 前端开发精华文章推荐>2014年第5期(总第26期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
随机推荐
- jquery中$.each()的用法
each()函数是基本上所有的框架都提供了的一个工具类函数,通过它,你可以遍历对象.数组的属性值并进行处理.jQuery和jQuery对象都实 现了该方法,对于jQuery对象,只是把each方法简单 ...
- netcore应用程序部署程序到ubuntu
运维需求:获取服务器的运行情况,是否CPU.内存较高等,上报到运维系统 环境:ubuntu16.04 工具::netcore2.1.supervisor 程序实现(代码就不贴了)参考:https:// ...
- Widows 和Linux 查看和操作端口方法
Windows 打开cmd1.netstat -n查看本机的使用的所有端口①.proto表示协议 有tcp和udp两种②.Local Address 表示本机的IP,后面跟的是我们使用的端口号③.Fo ...
- SecureCRT连接虚拟机失败及虚拟机ping不通外网
背景: VMware上安装了centos,从学校的网络换到了家里后,用SecureCRT登录时发现 connection closed,然后在虚拟机里发现ping不通外网了,ping虚拟机IP是通的. ...
- Reactjs项目性能优化
在construct中绑定函数this shouldComponentUpdate React.PureComponent 无状态组件 chrome浏览器性能优化工具 setTimeout,setIn ...
- SQL Server 创建服务器和数据库级别审计
一.概述 在上一篇文章中已经介绍了审计的概念:本篇文章主要介绍如何创建审计,以及该收集哪些审核规范. 二.常用的审核对象 2.1.服务器审核对象 1.FAILED_LOGIN_GROUP( Audit ...
- 在线生成透明ICO图标神器
此神器的链接为:http://ico.duduxuexi.com/ 大家可以将这个网址收藏好,本人亲测十分好用!对我们的ios,安卓以及windows开发都有极大的好处.
- Win10 安装 VMWare中 MAC OS X的安装,VMWare tools的配置与iOS的Helloworld
iOS的开发必须在MAC OS X系统下进行,这很蛋疼,现在MACBOOK动不动就上千上万大洋,这足够买台配置怪兽了,好吗?然而,我们是可以通过在VMWare中安装MAC OS X进行iOS开发的.对 ...
- 【RL-TCPnet网络教程】第12章 TCP传输控制协议基础知识
第12章 TCP传输控制协议基础知识 本章节为大家讲解TCP(Transmission Control Protocol,传输控制协议),通过本章节的学习,需要大家对TCP有个基本的认识,方 ...
- [Swift]LeetCode129. 求根到叶子节点数字之和 | Sum Root to Leaf Numbers
Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number ...