Java I/O体系详细讲解
注意:
此文侧重讲解Java的IO主要体系,至于具体API功能会在后面的文章详细讲解。
I/O以及I/O流的定义:
- I/O实际上是Input/Output,也就是输入/输出,输入指的是从存储设备中读取数据,比如从磁盘读取数据到内存中;输出指的是把数据回写到存储设备中,比如把内存中的数据回写到磁盘中。
- 流是一种抽象概念,可以类比成水流,而数据类比成水,数据流的传递可以类比成水流的传输,是一种无结构化的数据传递。
Java中的I/O
I/O的数据来源有:磁盘、内存、网络、键盘等。
- 输入流:Java的输入流是指从数据来源读取数据到内存的流。比如从磁盘读取数据到内存的流,从网络读取到内存的流,从内存读取到内存的流等都是输入流。
- 输出流:Java的输出流是指从内存回写到数据源的流。比如从内存输出到网络的流,从内存回写到磁盘的流等等都是输出流。
Java的I/O体系:
java中的IO流的类有很多,但是实际上核心的体系只有File、InputStream、OutputStream、Writer、Reader。
- File类:Java对文件的抽象,是为文件或者目录进行删除、重命名,移动、创建等很多操作而设计的一个类。
IO流的分类:
IO流按照操作的数据单元可以分为字节流跟字符流:字节流与字符流的区别
- 字节流:操作的数据单元是8位的字节。以InputStream(输入流)、OutputStream(输出流)作为抽象基类。这种流的API操作的数据单位是字节。适用于任何数据的传输。
- 字符流:操作的数据单元是字符,以Writer(输出)、Reader(输入)作为抽象类。这种流的API操作的数据单位是字符,会把若干个字节按照一定的编码规则编码成字符。只适用于文本类数据的传输,不能用于类似图片,音频等二进制数据的传输。
下图是一个JAVA I/O体系的脑图:
JAVA IO的原理:
文件读取原理图:(这是基于文件的IO,网络IO后面会有):
说明:
我们平时的应用进程是运行在用户态里面,对硬件的操作要在内核态中通过系统调用实现。而用户与内核态的切换要消耗系统资源。区分用户态和内核态主要是为了系统的安全性考虑。内核态会拥有用户态不具有的权限。
原理图说明:
- 用户进程调用输入流的read方法,然后尝试读取用户缓冲区的数据,如果能读取到数据,直接返回,如果读取不到就进入第二步。
- 如果用户缓冲区读取不到数据,就调用read0方法,从内核缓冲区读取数据到用户缓冲区。
- 调用read0方法后,切换到内核态,内核通过系统调用发送指令给磁盘控制器,要求读取磁盘的数据到内核缓冲区。
- 磁盘控制器调用DMA,从磁盘中读取数据到内核缓冲区。
- 数据读取完毕后,用户进程从内核缓冲区读取数据到用户缓冲区。
- 然后从用户缓冲区读取数据返回。
文件写入原理流程图:
体系的详解文章:
Java IO之File类详解
Java I/O体系之OutputStream和InputStream详细讲解
Java I/O体系之Writer和Reader详细讲解
Java I/O体系详细讲解相关推荐
- JAVA MemCache 史无前例的详细讲解 看完包精通MEMCACHE
JAVA MemCache 史无前例的详细讲解!看完包精通MEMCACHE! 分类: 高并发_性能2012-08-22 09:15 5051人阅读 评论(0) 收藏 举报 javastringobje ...
- Java字节码的详细讲解-刘宇
Java字节码的详细讲解-刘宇 一.字节码的整体结构 二.字节码范围解析 2.1.魔数 2.2.版本信息 2.3.常量池(constant pool) 2.4.描述符规则 2.5.访问标志(Acces ...
- java回忆录—输入输出流详细讲解(入门经典)
今天我们开始进入学习 java 中比较让人头疼的事, 那就是 I/O 流.多线程.网络编程.这里对 I/O 流的一个详细讲解.希望对大家有点用吧.(不看后悔哦) 一.什么是IO Java中I/O操作主 ...
- java utl_java utl包详细讲解.doc
java utl包详细讲解 java.util包 2006-05-30 10:06:02 来源: JR 网友评论0?条 论坛 ?? 本章介绍Java的实用工具类库java.util包.在这个包中,Ja ...
- Java类与对象详细讲解(上)
目录 一.类与对象的概念 1.1 什么是面向对象 1.2 什么是对象 1.3 什么是类 二.类与对象的定义 2.1 类的创建 2.2 对象的创建 2.3 练习创建两个dog对象,定义其属性 ...
- JAVA继承和多态详细讲解
面向对象编程的重要知识:继承和多态.通过类的继承机制,可以使用已有的类为基础派生出新类,无需编写重复的程序代码,很好地实现程序代码复用.多态是面向对象编程中继封装和继承之后的另一大特征,它具体是指同一 ...
- java高并发案例详细讲解
对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了.而并发问题是绝大部分的程序员头疼的问题, 但话又说回来了,既然逃避不掉,那我们就坦然面对吧~今天就让我们一起来研 ...
- JAVA MemCache 史无前例的详细讲解
Memcach什么是Memcache Memcache集群环境下缓存解决方案 Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式 ...
- JAVA MemCache 史无前例的详细讲解【转】
Memcach什么是Memcache Memcache集群环境下缓存解决方案 Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式 ...
最新文章
- java x00_有没有通过python反序列化java对象的方法
- c语言程序执行时无法输入字符串,C语言程序设计中键盘输入数据的方法分析
- 安卓上比较好的python开发软件-手机随时随地写Python,还可以开发安卓APP,太厉害了!...
- Dataset:数据集集合(CV方向数据集)-常见的计算机视觉图像数据集大集合包括表面缺陷检测数据集(持续更新)
- C++ Primer 5th笔记(chap 12 动态内存)unique_ptr
- 知道c语言单元测试答案西安工程大学免费,C语言程序设计(西安工程大学)知到章节测试题答案...
- 使用PyQT编写界面程序
- 有网友提问,关于本地XML转JSON的小工具
- 如何开发 Servlet 程序
- Mysql简单的存储过程怎么写
- atitit 用什么样的维度看问题.docx 如何了解 看待xxx
- xp系统计算机启动时灰色界面,windows xp系统下屏幕开始按钮变成灰色怎么处理
- intel服务器最新主板芯片组,英特尔服务器主板芯片组驱动程序
- GTX高速收发器Transceiver概述与收发共同特征(UG476)
- Redis远程连接不上解决办法
- python,给定任意列表lst和一个任意值item,返回item在lst中第一次出现的位置
- 【蓝桥杯专题】 贪心(C++ | 洛谷 | acwing | 蓝桥)
- 小学信息技术 用计算机画画 教学目标,三年级下册信息技术教学计划4篇
- APPNP:PREDICT THEN PROPAGATE: GRAPH NEURAL NETWORKS MEET PERSONALIZED PAGERANK
- CAN 常见错误排查
热门文章
- 数据库笔记10:创建与管理视图
- Java案例:汉诺塔问题
- 刚安装玩mysql如何登录不了_解决启用GTID binlog新安装完的MySQL提示无法登录
- qtablewidget固定一列滚动_简单易懂,最全滚动轴承基本知识汇总
- 2017.9.11 海拔 思考记录
- 【英语学习】【Daily English】U11 Work L01 Would you like a tour of the office?
- python标注工具_Python labelImg 图像标注工具安装及使用教程windows版(亲测有效)
- 回答一下这些游戏帧数有关的问题吗?
- g6-editor 使用
- JCreator 写applet