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

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a724888/article/details/61916185 深入分析 Java I/O 的工作机制总结:1 I/O接口分为字节型和字符型,通过inputstreamreader进行转换。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a724888/article/details/61916185

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



总结:

1 I/O接口分为字节型和字符型,通过inputstreamreader进行转换。

2I/O访问方式
2.1 磁盘I/O:标准访问文件方式:从 用户地址空间经过内核空间 物理磁盘 再到
2.2 直接I/O:不经过内核空间直接访问磁盘,但是不经过缓存,速度较慢。
2.3 内存映射方式访问,内存某一块区域与磁盘关联,数据共享

2.4 同步、异步、阻塞、非阻塞:
同步异步注重调用的方式,
同步在调用时会等待调用返回结果。

异步会直接返回,并等所调用的对象进行回调。
阻塞非阻塞注重结果的返回

阻塞会一直挂起等待返回值。
非阻塞可以在等待时做其他事,隔一段时间再来查看结果。

3、java序列化技术(java io):实现serializable接口。与cloneable接口的区别是浅拷贝和深拷贝的区别。
要点有:
3.1父类实现serializable接口,子类可序列化
3.2、子类实现serializable接口,父类没有,父类属性不能序列化
3.3、若序列化的对象持有其他对象引用,其他对象也要序列化。
3.4、反序列化时id若被修改则会失败。
3.5transient关键字指定某属性不被序列化。


4、网络I/O基于socket
4.1基础是tcp协议
4.2影响传输的因素:带宽、传输距离、tcp拥塞控制
4.3socket包含本地地址,远程地址,端口号。
4.4socket创建时,操作系统为其分配一个缓冲区,用于数据读取与写入。
sendq队列用于写入数据到outputstream,recvq队列用于读取数据到inputstream。
队列满时会阻塞,队列空时会等待,即生产消费者的阻塞队列模式。

5NIO:解决BIO的困境,采用非阻塞io,
1使用selector静态工厂创建一个选择器。
2创建一个服务端的channel绑定到一个socket对象,把他注册到选择器上,selector可以监听channel中所有通信信道的事件。
3将通信信道设为非阻塞,使线程可以在信道之间切换。
4通过selectedkey来检查已注册选择器上的信道是否有事件发生,如果有事件发生,返回所有selectedkey,通过channel方法得到通信信道对象,通过buffer进行数据读取。
5、tomcat和jetty使用一个线程监听客户端请求,是阻塞的,另一个线程负责处理请求,是非阻塞的。
6、线程在得知事件发生后,找到对应的buffer进行数据交互,并且可以与多个buffer交互,是非阻塞的。
7、buffer的数据访问方式:经过socket缓冲再复制到buffer,或者直接操作系统缓冲区(通过directbuffer操作非jvm堆内存)每次创建或释放需要调用一次system.gc。可能引起内存泄漏。

6、IO调优
1磁盘优化
2tcp参数优化
3网络io优化:减少交互、减少数据返回、减少编码。

适配器和装饰者:
适配器把一个接口转接成另一个接口。
而装饰者只是扩展原接口功能。


原文链接:http://blog.csdn.net/a724888/article/details/61916885



相关文章
|
4天前
|
Java 程序员 UED
深入浅出Java异常处理机制
【8月更文挑战第27天】在Java编程的海洋里,异常如同突如其来的风暴,威胁着程序的平稳航行。掌握异常处理机制,就像学会驾驭这些风暴,确保船只(程序)能在风浪中稳健前行。本文将带你领略Java异常处理的魅力所在,从基础概念到高级技巧,一网打尽,助你在面对异常时从容不迫,化危为机。
|
1天前
|
消息中间件 算法 Java
深入浅出操作系统:进程管理的艺术掌握Java中的异常处理机制
【8月更文挑战第30天】在数字世界的舞台上,操作系统扮演着导演的角色,精心安排着每一个进程的表演。本文将揭开进程管理的神秘面纱,从进程的诞生到终结,探究它们如何在操作系统的指挥下和谐共舞。通过生动的比喻和直观的代码示例,我们将一同走进操作系统的核心,理解进程调度、同步与通信的内在机制,以及它们对计算生态的重要性。让我们跟随代码的节奏,一起感受操作系统的魅力吧!
|
2天前
|
Java 编译器 开发者
Java中的异常处理机制
【8月更文挑战第30天】在Java编程中,异常处理是不可或缺的一部分。本文将探讨Java的异常处理机制,包括异常的概念、分类以及如何处理异常。我们将通过实际代码示例来展示如何在Java程序中捕获和处理异常,确保程序的稳定性和可靠性。无论你是初学者还是有经验的开发者,这篇文章都将帮助你更好地理解和应用Java的异常处理机制。
5 1
|
4天前
|
Dubbo Java 关系型数据库
Java SPI机制分析
文章深入分析了Java SPI机制,以JDBC为例,详细探讨了服务提供者接口的发现、加载过程,并提供了一个序列化服务的实战示例,展示了如何使用ServiceLoader进行服务发现和扩展。
10 3
|
4天前
|
Java 程序员 开发者
深入理解Java异常处理机制
【8月更文挑战第27天】在Java编程的海洋中,异常处理是一艘必不可少的救生艇。它不仅能帮助我们在代码航行中避开暗礁,还能在风暴来临时保持程序的稳定。本文将带你探索Java异常处理的奥秘,从基础到高级,让你的程序更加健壮和用户友好。准备好了吗?让我们一起启航!
|
5天前
|
监控 算法 安全
Java并发编程案例分析:死锁的检测与解决
Java并发编程案例分析:死锁的检测与解决
10 2
|
1天前
|
安全 Java
深入浅出Java异常处理机制
【8月更文挑战第30天】在Java编程世界中,异常处理是维护程序健壮性的重要手段。本文将带你一探Java异常处理的奥秘,从基本的异常类型到高级的处理策略,我们用简单的语言和生动的比喻,让你像拼图一样轻松掌握每个部分。准备好,让我们一起揭开异常处理的面纱,学会如何优雅地应对程序中的“意外惊喜”。
|
2天前
|
Java 开发者 容器
Java反射机制--手写springioc
这是一个非常基础的Spring IoC容器的实现方法。当然,真正的Spring IoC容器功能远不止这些,它还支持依赖注入、生命周期管理、配置方法等更高级和复杂的功能。但是通过这个简单的例子,你可以理解IoC容器的基本原理以及反射在其中的作用。在实际应用中,你通常会使用Spring框架提供的IoC容器,这样可以更加专注业务逻辑的实现,而不需要自己维护这样一个容器。
8 0
|
2天前
|
存储 消息中间件 监控
Java日志详解:日志级别,优先级、配置文件、常见日志管理系统ELK、日志收集分析
Java日志详解:日志级别,优先级、配置文件、常见日志管理系统、日志收集分析。日志级别从小到大的关系(优先级从低到高): ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF 低级别的会输出高级别的信息,高级别的不会输出低级别的信息
|
2天前
|
算法 Java 程序员
探索代码之美——从小白到大牛的编程旅程深入理解Java中的异常处理机制
【8月更文挑战第29天】编程,一门看似神秘而复杂的艺术,实则充满无限可能与创造的乐趣。本文将带你走进编程的世界,从最初的迷茫与困惑,到逐步掌握编程思维,再到深入理解代码背后的哲学,一起见证一个编程小白如何成长为技术大牛的奇妙旅程。
下一篇
云函数