java I/O工作机制

时间:2023-02-20 22:41:02

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. 建模元件有哪些在MapleSim中

    信号库:包含通用信号模块.布尔.控制器.离散信号模块.信号源.线性信号模块.非线性信号模块.时间离散信号模块.查询表.信号转换器.数学运算.关系元件.特殊信号模块,应用案例. 电子库:包含电阻.运算放 ...

  2. 依赖注入 – ASP.NET MVC 4 系列

           从 ASP.NET MVC 3.0 开始就引入了一个新概念:依赖解析器(dependence resolver).极大的增强了应用程序参与依赖注入的能力,更好的在 MVC 使用的服务和创 ...

  3. linux命令行netstat总结

    1.所谓的监听就是某个服务程序会一直常驻在内存中,所以该程序启动的Port就会一直存在. 2.在小于1023的端口,都是需要以root身份才能够启动的. 3.大于1024以上的Port主要是作为cli ...

  4. July 6th, Week 28th Wednesday, 2016

    Diligence is the mother of good fortune. 勤勉是好运之母. The mother of good fortune can be diligence, conti ...

  5. 『TCP/IP详解——卷一:协议』读书笔记——05

    2013-08-19 22:35:57 2.6 PPP:点对点协议 PPP点对点协议修改了SLIP协议中的所有缺陷: 1. 在串联链路上封装IP数据报的方法.PPP即支持数据为8位&无奇偶检验 ...

  6. springmvc中使用response的out.print问题

    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws E ...

  7. Android Property Animation 物业动画

    效果图:   Property Animation介绍: 出生在sdk3.0,是利用了View所拥有的属性,进行一系列的操作. 比方一个View有什么样的setAbc的属性,那么理论上就能够设置它. ...

  8. vue.js环境搭建

    安装 nodejs 地址 :https://nodejs.org/en/ npm安装最新版本 更新npm :npm update -g 安装淘宝镜像 npm install -g cnpm --reg ...

  9. JavaScript观察者模式

    观察者模式观察者模式又叫发布订阅模式(Publish/Subscribe),它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态发生变化时就会通知所有的观察者对象,使得 ...

  10. 学习笔记_J2EE_SpringMVC_03_注解配置_@RequestMapping用法

    @RequestMappingde的用法 摘要: 主要介绍注解@RequestMapping的用法 一.@RequestMapping 简介 在Spring MVC 中使用 @RequestMappi ...