[二十六]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 ...
随机推荐
- Vue(三十一)轮播组件
直接上源码 (1)组件文件 Carousel.vue <template> <div class="carousel-component"> <div ...
- 20175324王陈峤宇 2018-2019-2《Java程序设计》结对编程项目-四则运算 第一周 阶段性总结
20175324王陈峤宇 2018-2019-2<Java程序设计>结对编程项目-四则运算 第一周 阶段性总结 需求分析 这次的结对作业是要求我们利用栈来设计一个计算器. 自动生成四则运算 ...
- emWin洗衣机简易操作界面,含uCOS-III和FreeRTOS两个版本
第3期:洗衣机简易操作界面 配套例子:V6-904_STemWin提高篇实验_洗衣机简易操作界面(uCOS-III)V6-905_STemWin提高篇实验_洗衣机简易操作界面(FreeRTOS) 例程 ...
- macOS 10.14虚拟机安装教程
windows10下安装vmware14.0以及macOS 10.14图文详解 工具/原料 windows10 vmware 14.0 macOS 10.14懒人版 mac补丁unlocker工具 ...
- NIO类库
NIO概述 从JDK1.4开始,引入了新的I/O类库,它们位于java.nio包中,其目的在于提高I/O的操作效率.nio是new io的缩写. 参考文章:NIO BIO AIO区别 java.nio ...
- [Swift]LeetCode293. 翻转游戏 $ Flip Game
You are playing the following Flip Game with your friend: Given a string that contains only these tw ...
- [Swift]LeetCode313. 超级丑数 | Super Ugly Number
Write a program to find the nth super ugly number. Super ugly numbers are positive numbers whose all ...
- [Swift]LeetCode991. 坏了的计算器 | Broken Calculator
On a broken calculator that has a number showing on its display, we can perform two operations: Doub ...
- Python内置函数(50)——print
英文文档: print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False) Print objects to the text str ...
- Linux系统打开文件最大数量限制(进程打开的最大文件句柄数设置)
ulimit [-HSTabcdefilmnpqrstuvx [limit]] 利用ulimit命令可以对资源的可用性进行控制. -H选项和-S选项分别表示对给定资源的硬限制(hard limit ...







