IO中的几种形式
基于字节:InputStream、OutputStream
基于字符:Writer、Reader
基于磁盘:File
基于网络Socket
 
最终都是字节操作,字符到字节要编码转换。耗时,容易乱码
 
1,磁盘IO
磁盘设置,应用程序只能系统调用,要内核空间和用户空间切换,
标准访问文件:
读取为例,先读到内核空间,再读到用户空间。
另外有直接IO,系统缓存一下,直接从缓存读
同步,异步,内存映射(内核空间映射到用户空间减少复制操作)
 
2,网络IO
Socket是抽象概念,也是字节流
 
3,NIO
主要是信道和选择器。传统IO访问竞争资源要同步,产生阻塞
NIO一个线程监听客户端请求,阻塞方式执行。另外一个线程负责处理请求用NIO
tomcat的NIO
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
可以看出在处理动态资源时NIO的优势并不明显甚至还不如IO,其主要原因是动态资源,是IO和cpu密集型操作,导致很多请求都阻塞在CPU和IO上,所以socket IO只能干等着,发挥不出NIO的优势

再看处理静态时NIO的表现,虽然不稳定但性能的提升还是很明显的,所以NIO常常用来处理请求多并且处理起来比较简单的应用中,如memcached,NIO的方式连接redis也能提升并发数

 
FileChannel
把文件映射到内存区域,省去了内核空间复制到用户空间的损耗
 
 
4,IO调优
 
磁盘:增加缓存,减少磁盘访问次数
 
TCP网络:TCP连接复用,增加端口范围
减少网络交互次数、传输数据量、减少编码(转化成字节再发送)
注意动态资源NIO,不明显,静态资源更适合
 
5,相关的设计模式:
 
适配器模式,改变接口来重复使用
把一个类的接口变成客户端能接受的另一种接口。
使两个接口不一样的类能一起工作。
InputStreamReader适配器实现了Reader接口,持有InputStream引用。这样Reader字节最终调用InputStream
InputStreamReader:对象+接口
 
装饰器模式,接口不变,增强原来对象的功能
赋予类更多的功能,
FileInputStream,
BufferedInputStream是具体实现者,把InputStream读取内容保存在内存中,增强了功能。
 
抽象组件:InputStream
装饰器FileInputStream:实现了InputStream所有接口,持有InputStream引用
实现者BufferedInputStream:把InputStream读取内容保存在内存中,增强了功能。

1,理解java中的IO的更多相关文章

  1. 深入理解Java中的IO

    深入理解Java中的IO 引言:     对程序语言的设计者来说,创建一个好的输入/输出(I/O)系统是一项艰难的任务 < Thinking in Java >   本文的目录视图如下: ...

  2. java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET

    java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET 亲,“社区之星”已经一周岁了!      社区福利快来领取免费参加MDCC大会机会哦    Tag功能介绍—我们 ...

  3. java中的IO操作总结

    一.InputStream重用技巧(利用ByteArrayOutputStream) 对同一个InputStream对象进行使用多次. 比如,客户端从服务器获取数据 ,利用HttpURLConnect ...

  4. [译]线程生命周期-理解Java中的线程状态

    线程生命周期-理解Java中的线程状态 在多线程编程环境下,理解线程生命周期和线程状态非常重要. 在上一篇教程中,我们已经学习了如何创建java线程:实现Runnable接口或者成为Thread的子类 ...

  5. Java 中的 IO 与 socket 编程 [ 复习 ]

    一.Unix IO 与 IPC Unix IO:Open-Read or Write-Close IPC:open socket - receive and send to socket - clos ...

  6. Java中的IO

    引言:     对程序语言的设计者来说,创建一个好的输入/输出(I/O)系统是一项艰难的任务 < Thinking in Java >   本文的目录视图如下:   Java IO概要 a ...

  7. JDK学习---深入理解java中的HashMap、HashSet底层实现

    本文参考资料: 1.<大话数据结构> 2.http://www.cnblogs.com/dassmeta/p/5338955.html 3.http://www.cnblogs.com/d ...

  8. Java NIO学习系列六:Java中的IO模型

    前文中我们总结了linux系统中的5中IO模型,并且着重介绍了其中的4种IO模型: 阻塞I/O(blocking IO) 非阻塞I/O(nonblocking IO) I/O多路复用(IO multi ...

  9. Java NIO之Java中的IO分类

    前言 前面两篇文章(Java NIO之理解I/O模型(一).Java NIO之理解I/O模型(二))介绍了,IO的机制,以及几种IO模型的内容,还有涉及到的设计模式.这次要写一些更贴近实际一些的内容了 ...

随机推荐

  1. 【9.29 模拟】T3 小清新最优化(easy)

    [题目描述] 给出一个长度为 n 的序列,序列的每个元素为一个二元组,代表一种单目运算: • \((0,x)\): 对于一个数\(a\),将其变为 \(a\&x\).\((\&=x)\ ...

  2. 树状数组 && 线段树应用 -- 求逆序数

    参考:算法学习(二)——树状数组求逆序数 .线段树或树状数组求逆序数(附例题) 应用树状数组 || 线段树求逆序数是一种很巧妙的技巧,这个技巧的关键在于如何把原来单纯的求区间和操作转换为 求小于等于a ...

  3. WP | 后台PHP脚本无法修改及服务器无法直接写入问题的解决

    问题描述 试图修改页脚的时候,发现WordPress后台Appearance(外观)选项之下没有Editor(编辑)的子选项,之后进行设置修改后又发现无法保存. 试图安装插件,但是无法直接安装,推测是 ...

  4. Webpack2入门

    webpack 2 将在其文档完成之后正式发布.但这并不意味着不可以开始使用它,如果你知道怎么配置的话. 什么是 Webpack? 简单来说,Webpack 就是一个针对 JavaScript 代码的 ...

  5. Markdown黑色背景代码高亮

    因为我默认的不是Markdown...这里分享给用Markdown的小伙伴吧. /* 使用了Monokai Sublime的黑色主题皮肤,但是还存在样式冲突,需要自己修改 这个样式只适合使用maked ...

  6. c#正则表达式最简demo

    各个语言的正则表达式规则略有不同 项目中用到,所以将这个最简单的demo记录 using System; using System.Collections.Generic; using System. ...

  7. 课时60.CSS的固定格式(掌握)

    CSS就是用来设置样式的,美化界面的 如何验证? 打开一个京东首页 删除掉css样式 发现页面变得非常难看 由此我们验证了一个说法,css就是用来美化界面的 1.格式: <style type= ...

  8. 时间戳转化为时间&&截取时间的年月日

    时间戳转化为正常的时间格式 function formatDate(date, fmt) { if (/(y+)/.test(fmt)) { // 在这里 date.getFullYear() + ' ...

  9. 自动化测试selenium教程

    什么是自动化测试: 自动帮我们测试一个系统里面的主要功能,一个app.电脑网站.网页,每个系里面许多的功能,好比一个淘宝页面,里面N多功能,登录.注册,推荐,商品详情.评论等等:软件生命周期:需求调研 ...

  10. Cantor表

    题目描述 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 - 2/1 2/2 2/3 2/4 - ...