java I/O 的基本架构:

1:基于字节操作的I/O接口 InputStream OutputStream
2:基于字符操作的I/O接口 Writer 和Reader
3:基于磁盘操作的I/O接口 File
4:基于网络操作的I/O接口 Socket
 
12为数据传输的格式
34为数据传输的方式
 
123位于java.io包中其中包含了大概80个类
 
对于1:基于字节·InputStream OutputStream。
1:操作数据的方式可以组合使用;
2:必须指定流文件写到网络中还是磁盘中;
对于2:基于字符 ·Write Reader
1:之规定了字符读写的方式
2:实现的函数:write (char cb-uf[], int off ,int len);
reader(char cbuf[], int off, int ;len );
对于12,字符字节之间的转化
1:字节转字符 InputStreamReeader()
2: 字符转字节 OutputStreamWriter()
 
对于三:磁盘I/O工作机制
访问文件包含的空间:
1:磁盘
2:内核空间
3:用户空间
4: 缓存
工作流程:应用程序访问磁盘空间,需要经过系统的write 和 read 调用来;系统为了安全,会将内核程序和用户程序之间隔离从而产生内核空间和用户空间;
1:标准访问文件的方式:
读取:read接口先在内核空间中搜索,没有则从磁盘中读取;
写入:write接口将数据从用户复制到内核,写磁盘是异步的,除非调用sync同步命令;
2:直接I/O方式:
读写都是直接通过用户空间的缓存来进行,可以做到预加载了,提高访问速度,如果访问的数据没有在应用程序缓存中,将会很慢;
3: 同步访问文件的方式:
性能较差,只用当文件全部读写完成,才会返回给应用程序成功的标志;
4:异步访问文件的方式:
发出处理文件的线程之后,不会出现阻塞等待,提高了应用程序的效率,文件读写的效率并没有提高;
5:内存映射的方式:
将内存中的某一区域和磁盘中的文件关联起来,访问内存中的一段数据时,转换为访问文件的数据,减少从内核空间缓存到用户空间缓存的数据复制操作;
 
java序列化技术:继承java.io.Serializable接口;将一个对象转化成一串二进制表示的字节数组,通过保存或传义这些字节数据来达到持久化的目的。
序列化情况的总结:1:父类继承Serializable接口,子类都可以被序列化
2:子列实现了Seriializable接口,父类没有,父类中的属性不能序列化,单子类中属性仍能正确序列化。
3:序列化的属性是对象,对象必须实现Serializable接口;
4:反序列化,如果对象的属性有修改或者删减,则修改的部分属性会丢失,但不会报错;
5:反序列化时,如果serialVersionUID被修改,反序列化会失败;
 
四:网络I/O的工作机制;
TCP的是十一种状态:
1:CLOSED :起始点,在连接关闭或超时的时候变成此状态
2:LISTEN : 监听来自网络节点上其他主机的TCP端口连接请求,服务端需要调用socket, bind,listen函数,就进入此状态。此称为应用程序被动打开(等待客户端来连接)
3:SYN_RCVD :服务器接收到来自客户端的连接请求(发送一个SYN分节),服务器端tcp状态就由LISTEN- > SYN_4:RCVD,服务器端发送ACK和SYN,或者客户端在发起SYN的同时接收到服务器端的SYN,客户端就会SYN_SENT -> SYN_RCVD。
5:SYN_SETN:客户端发起连接,发送SYN给服务器端。如果服务器端不能连接(应用关闭;或超时),则直接进入CLOSED状态。具体行为是发起一个SYN连接请求
6:ESTABLISHED:总体说来,客户端和服务器端在完成三路握手后,两者最终进入的状态,表示连接已经建立成功,可以传送数据了。对于服务器端来说,就是在SYN_RCVD状态时,收到了来自客户端的ACK。于是SYN_RCVD->ESTA7:BLISHED;对于客户端来说,就是在SYN_SENT状态时,收到了来自服务器端的SYN+ACK分节,状态从SYN_SENT->ESTABLISHED,然后发送ACK
8:FIN_WAIT_1:主动关闭的一方(发送FIN的那方)从ESTABLISHED -> FIN_WAIT_1
9:FIN_WAIT_2:主动关闭的一方,接收到对方的FIN ACK,进入此状态。由此不能再接收对方的数据。但是能够向对方发送数据(此句话很重要)
10:PCLOSE_WAIT:接收到FIN以后,被动关闭的一方进入此状态。具体动作时接收到FIN,同时发送ACK。为了便于记忆,大家可以这么想,TCP终止中,接收到了FIN的被动关闭方发送ACK后,过会还要发送FIN表示自己也要关闭了,中间的这段就可以叫做CLOSE_WAIT(等待关闭)
LAST_ACK:,被动方发送FIN,导致CLOSE_WAIT -> LAST_ACK,TCP终止则还需要等待最后一个ACK,所以状态叫做LAST_ACK,等到最后ACK后,LAST_ACK ->CLOSED
11: CLOSING:主动关闭方处于FIN_WAIT_1状态时,接收FIN,则从FIN_WAIT_1 -> CLOSING
影响网络传输的因素:网络带宽,传输距离,TCP拥塞控制
 
 
建立通信链路Socket:位于TCP/UDP之上,包含本机地址,远程地址,端口套接字,经历完TCP三次握手协议,之后建立;
网络数据传输时,两端同时发送数据,会出现死锁,通过NIO工作机制,可以避免。NIO机制通过引入:Channel Buffer Selector 来处理解决;
 
 
设计模式解析之适配器模式:
Tareget(目标接口):所要转换的所期待的接口;
Adaptee(源角色):需要适配的接口;
Adapter(适配器):将源接口是配成目标接口,继承源接口,实现目标接口;
设计模式解析之装饰器模式:
Component:定义抽象接口,规定被装饰组件的功能;
ConcreteComponent:实现抽象组件的所有功能;
Decorator:装饰器角色
 
 

java I/O工作机制的更多相关文章

  1. 2 深入分析 Java IO的工作机制(一)

    大部分Web应用系统的瓶颈都是I/O瓶颈 2.1 Java的I/O类库的基本架构 Java的I/O操作类在包java.io下,大概有将近80个类,这些类大概可以分成如下4组. 基于字节操作的I/O接口 ...

  2. 深入分析Java I/O 工作机制

    前言 :  I/O 问题是Web 应用中所面临的主要问题之一.而且是任何编程语言都无法回避的问题,是整个人机交互的核心. java 的I/O类操作在java.io 包下,将近80个子类, 大概可以分成 ...

  3. Java I/O 工作机制(一) —— Java 的 I/O 类库的基本架构

    Java 的 I/O 类库的基本架构 Java 的 I/O 操作类在包 java.io 下,有将近 80 个类. 按数据格式分类: 面向字节(Byte)操作的 I/O 接口:InputStream 和 ...

  4. Java I/O 工作机制(二) —— Java 的 I/O 的交互方式分析

    简介: BIO:同步阻塞式IO,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善.  ...

  5. Java Web ClassLoader工作机制

    一.ClassLoader的作用: 1.类加载机制:父优先的等级加载机制 2.类加载过程 3.将Class字节码重新解析成JVM统一要求的对象格式 二.ClassLoader常用方法 1.define ...

  6. Java Socket 的工作机制

    转载,请加上原文链接: 目录 socket 对象的创建时间 socket 通信可能会造成死锁 socket 对象的创建时间 这里需要一点TCP的知识, TCP状态分析请看 --> TCP转态转换 ...

  7. 2 深入分析 Java IO的工作机制(二)

    2.5 I/O调优 下面总结一些磁盘I/O和网络I/O的常用优化技巧. 2.5.1 磁盘I/O优化 1. 性能检测 应用程序通常都需要访问磁盘来读取数据,而磁盘I/O通常都很耗时,要判断I/O是否是一 ...

  8. 深入分析 Java I/O 的工作机制--转载

    Java 的 I/O 类库的基本架构 I/O 问题是任何编程语言都无法回避的问题,可以说 I/O 问题是整个人机交互的核心问题,因为 I/O 是机器获取和交换信息的主要渠道.在当今这个数据大爆炸时代, ...

  9. 深入分析 Java I/O 的工作机制

    I/O 问题可以说是当今互联网 Web 应用中所面临的主要问题之一,因为当前在这个海量数据时代,数据在网络中随处流动.这个流动的过程中都涉及到 I/O 问题,可以说大部分 Web 应用系统的瓶颈都是 ...

随机推荐

  1. 《你不知道的JavaScript(上卷)》读书笔记

    第一次尝试用思维导图记笔记,感觉还不错~~~不过还是改不了我读书笔记写成抄书笔记的毛病 =.= 因为开始学JS的时候,一般浏览器就已经支持ES6了,所以比较喜欢使用ES6语法,let,=>等,文 ...

  2. web容器 web服务器 servlet/jsp容器 之间的区别和关系

    今天学习tomcat时发现一篇写的比较好的文章,故分享给大家 Web服务器(软件): Apache http server, 这个它的网址,http://httpd.apache.org/downlo ...

  3. mysql 开发进阶篇系列 13 锁问题(关于表锁,死锁示例,锁等待设置)

    一. 什么时候使用表锁 对于INNODB表,在绝大部分情况下都应该使用行锁.在个别特殊事务中,可以考虑使用表锁(建议). 1. 事务需要更新大部份或全部数据,表又比较大,默认的行锁不仅使这个事务执行效 ...

  4. Android UI(五)云通讯录项目之联系人列表,带侧滑选择,带搜索框

    作者:泥沙砖瓦浆木匠网站:http://blog.csdn.net/jeffli1993个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节.交流QQ群:[编程之美 365234583]h ...

  5. Java设计模式之《构建者模式》及应用场景

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6553374.html 构建者模式,又称建造者模式,将一部负责对象的构建分为许多小对象的构建 ...

  6. vue_drf之实现短信验证码

    一.需求 1,需求 我们在做网站开发时,登录页面很多情况下是可以用手机号接收短信验证码,然后实现登录的,那我们今天就来做一做这一功能. 伪代码: 进入登录页面,点击短信登录 输入手机号码,点击获取验证 ...

  7. iOS -数据持久化方式-以真实项目讲解

    前面已经讲解了SQLite,FMDB以及CoreData的基本操作和代码讲解(CoreData也在不断学习中,上篇博客也会不断更新中).本篇我们将讲述在实际开发中,所使用的iOS数据持久化的方式以及怎 ...

  8. [转]MySQL 表锁和行锁机制

    本文转自:http://www.cnblogs.com/itdragon/p/8194622.html MySQL 表锁和行锁机制 行锁变表锁,是福还是坑?如果你不清楚MySQL加锁的原理,你会被它整 ...

  9. Docker虚拟机实战

    安装Docker虚拟机 ◆ 先更新yum软件管理器,然后再安装Docker    #更新yum软件管理器    yum -y update    #安装Docker    yum install -y ...

  10. [C#] C# 知识回顾 - Lambda

    C# 知识回顾 - Lambda 序 它是第十一个希腊字母,一个拥有失意.无奈.孤独.低调等含义的流行符号,也指示一款称为“半条命”的游戏. 不过,这次我所讲的是 C# 中的 Lambda. 目录 L ...