zoukankan      html  css  js  c++  java
  • 1,理解java中的IO

    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读取内容保存在内存中,增强了功能。
  • 相关阅读:
    南阳118--修路方案(次小生成树)
    Poj3026--Borg Maze(Bfs+Prime)
    sql常识- UNIQUE
    sql常识-FULL JOIN
    sql常识-RIGHT JOIN
    sql常识-LEFT JOIN
    sql常识-INNER JOIN
    sql常识-Join
    sql常识-Alias
    sql常识-BETWEEN 操作符
  • 原文地址:https://www.cnblogs.com/zkp2010/p/5510387.html
Copyright © 2011-2022 走看看