深入分析 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



相关文章
|
1月前
|
Java
Java并发编程中的锁机制
【2月更文挑战第22天】 在Java并发编程中,锁机制是一种重要的同步手段,用于保证多个线程在访问共享资源时的安全性。本文将介绍Java锁机制的基本概念、种类以及使用方法,帮助读者深入理解并发编程中的锁机制。
|
1月前
|
Java 程序员
Java中的异常处理机制
【2月更文挑战第22天】在Java编程中,异常处理是一个重要的概念。它允许程序员在程序执行过程中遇到错误时,对错误进行处理,而不是让程序崩溃。本文将介绍Java中的异常处理机制,包括异常的分类、如何捕获和处理异常以及自定义异常等内容。
18 1
|
1月前
|
存储 Java 数据库
|
1月前
|
Java
深入了解Java中的锁机制
深入了解Java中的锁机制
|
1月前
|
Java 程序员 编译器
认识Java 的反射机制
反射Reflection被视为动态语言的关键,反射机制允许程序在执行期间借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。反射是一种功能强大且复杂的机制。使用它的主要人员是工具构造者,而不是应用程序员。
29 5
|
1月前
|
开发框架 Java API
java反射机制的原理与简单使用
java反射机制的原理与简单使用
17 1
|
1天前
|
Java 数据库连接
深入理解Java异常处理机制
【4月更文挑战第24天】本文将探讨Java中的异常处理机制,包括异常的概念、分类、捕获和抛出等方面。通过深入了解异常处理机制,可以帮助我们编写更加健壮的程序,提高代码的可读性和可维护性。
|
20天前
|
安全 Java 调度
深入理解Java中的线程安全与锁机制
【4月更文挑战第6天】 在并发编程领域,Java语言提供了强大的线程支持和同步机制来确保多线程环境下的数据一致性和线程安全性。本文将深入探讨Java中线程安全的概念、常见的线程安全问题以及如何使用不同的锁机制来解决这些问题。我们将从基本的synchronized关键字开始,到显式锁(如ReentrantLock),再到读写锁(ReadWriteLock)的讨论,并结合实例代码来展示它们在实际开发中的应用。通过本文,读者不仅能够理解线程安全的重要性,还能掌握如何有效地在Java中应用各种锁机制以保障程序的稳定运行。
|
25天前
|
Java 程序员 开发者
深入理解Java异常处理机制
在Java编程中,异常处理是确保程序健壮性与稳定性的重要组成部分。本文旨在深度剖析Java异常处理机制的核心概念、结构及其实际应用策略,帮助开发者更好地理解并运用异常处理来优化程序设计。我们将从Java异常体系结构入手,探讨try-catch-finally语句块的执行流程,分析自定义异常的必要性与实现方式,并通过实例演示如何有效地管理和处理异常情况。
23 3
|
1月前
|
设计模式 XML 存储
java中的反射机制
java中的反射机制
12 1