前言

I/O问题从你开始使用电脑时就要接触,例如你打开电脑,还未进入操作系统时,最先进入的是BIOS(Basic Input/Output System),也是就是主板的系统,作为使用电脑的一步就已经开始涉及IO了,作为人机交互的第一步,I/O是机器获取和交换信息的主要渠道。

1.I/O分类

在Java中java.io下大概有接近80个类,进行以下分组:

  • 基于字节操作的I/O接口:InputStream和OutputStream。
  • 基于字符操作的I/O接口:Writer和Reader。
  • 基于磁盘操作的I/O接口:File。
  • 基于网络操作的I/O接口:Socket。
    注意:Socket类并不在java.io下

核心问题

  1. 数据格式
    2.传输方式
1.1 基于字节的I/O操作接口

基于字节的I/O操作接口输入和输出分别是InputSream和OutputStream,层次结构如下:

1.2磁盘I/O工作机制

(1)标准访问文件的方式
当应用程序调用read()接口时,操作系统检查在内核的高速缓存中没有需要的数据,如果已经缓存了,那么就直接从缓存中返回,如果没有,则从磁盘中读取,然后缓存在操作系统的缓存中。
写入的方式是,调用write()接口,将数据从用户地址空间复制到内核地址空间的缓存中。这时对用户程序来说写操作就已经完成,至于什么时候再写到磁盘中,由操作系统决定,除非显式调用了sync同步命令。
(2)直接I/O方式
所谓的直接I/O的方式就是应用程序直接访问磁盘数据,而不是经过操作系统内核数据缓冲区,这样做的目的就是减少一次从内核缓冲区到用户程序缓存的数据复制。
(3)同步访问文件的方式
(4)异步访问文件的方式
(5)内存映射的方式

1.3 解释

以上磁盘的工作机制基本都是抄书的,如果只是抄书,我觉得毫无意义,还不如直接去看书呢。
我在这里想解释一下,很多人都把内存和磁盘混为一谈,比如你这手机内存多大的呀?128G。每当听到这样的对话,我都会默许他说的其实是磁盘存储空间,而不是真的内存大小。当我们运行或者打开这个文件时,我们会将这个程序读到内存里去,这就是为什么内存越大,可同时运行的程序越多。
一个可以明显感知到磁盘和内存区别,就是我们在装系统的时候,如果我们选择使用U盘启动PE,然后通过U盘来装系统,当PE正常运行,这个时候,你拔掉U盘,你觉得你的电脑会黑屏关机吗?答案是不会的,我们确实用U盘来启动了,但是U盘里的PE并没有运行在U盘上,而是读到了内存,所以当你把U盘拔掉,电脑并不会关机,是不是没试过?那就赶快试试吧?以后再有人需要装系统的时候,你就可以展示你的“祖传装系统”手艺了。

1.4 Java访问磁盘文件

我们磁盘中唯一最小描述就是文件,也是操作系统和磁盘驱动器交互的最小单元。值得注意的是,Java创建File对象时,不会关注这个对象是否存在,就好像我们会存很多人的电话号码,但是不会逐个校验每个电话号码是否能打通。

2.网络I/O

前几篇已经介绍了网络传输的部分内容,这里就介绍一下影响网络传输的因素:

  • 带宽
  • 传输距离
  • TCP拥塞

深入分析Java Web-02-Java的I/O相关推荐

  1. Java Web和Java后端学习之路

    摘要: 每个阶段要学习的内容甚至是一些书籍.针对Java Web和Java后端开发 java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的 ...

  2. java web 总结,Java Web 相关概念经典总结(一)

    一 1.胖客户端程序RCP(Rich Client Program)也叫做桌面程序(Desktop Program),程序必须下载安装到计算机上才能运行. 2.瘦客户端程序TCP(Thin Clien ...

  3. java怎么监听多个组件,java web(五):java web三大组件之另外两个和八大监听器

    java的三大组件指Servlet.Filter.Listener.八大监听器指八个接口.前面介绍了Servlet,现在介绍一下Filter拦截器以及拦截地址的设置, Listener监听那些事件. ...

  4. Druid Monitor监控Java Web和Java SE项目

    Druid Monitor 对于数据源,大家已经接触了不少了.比如c3p0.dhcp.proxool等,之后又发现使用tomcat-jdbc可以大大的提高性能.但是针对于我们的高并发的系统来说,总希望 ...

  5. Java Web和Java后端开发的学习路线

    基础:比如计算机系统.算法.编译原理等等 Web开发: 主要是Web开发相关的内容,包括HTML/CSS/JS(前端页面).Servlet/JSP(J2EE)以及Mysql(数据库)相关的知识.它们的 ...

  6. linux java web.pdf,Java Web应用在ARM Linux平台上的实现.pdf

    Java Web应用在ARM Linux平台上的实现.pdf lSSN1009-3044 and KnowledgeTechnology电■知识与技术 Computer l-5690963 V01.5 ...

  7. java web空指针,java - Web服务中的Java空指针异常@autowired [重复] - 堆栈内存溢出

    错误:domain.SpeakerRecog.test上的java.lang.NullPointerException SpeakerMapper为null, speakermapper.insert ...

  8. JAVA作业 02 JAVA语法基础

    一. 思考问题一:枚举类型 public class EnumTest { public static void main(String[] args) { Size s=Size.SMALL; Si ...

  9. 【java web】java执行预编译Groovy脚本

    在JVM中运行Groovy类有两种方式: 使用Groovy编译所有的*.groovy为java的*.class文件,把这些*.class文件放在java类路径中,通过java类加载器来加载这些类. 通 ...

  10. Java Web开发与实战_Java Web开发技术与实战项目

    [实例简介] 北大青鸟ACCP6.0 使用JSP/Servlet/Ajax技术开发新闻发布系统第一部分课件以及代码答案1到6章 [实例截图] [核心代码] 7.<JavaWeb开发技术> ...

最新文章

  1. 如何使用Openfiler为VMware ESX设置一个免费的iSCSI或NAS储存系统
  2. jenkins参数化构建过程
  3. 正几边形可以实现无缝拼接?
  4. easyui-datebox禁止手动输入
  5. 使用Log4j为项目配置日志输出应用详细总结及示例演示.
  6. android来电事件,android – 来电时没有响铃事件
  7. ECSHOP邮件验证后送积分
  8. @sql 单元测试_SQL单元测试最佳实践
  9. FIFO、UART、ALE解释
  10. 测试中如何管理外包质量_【项目管理】资深游戏测试总监详解质量管理工作的9个步骤...
  11. PlaceholderTextView
  12. pdf文件解密去水印加书签
  13. html表单鼠标悬停变色,当我将鼠标悬停在html表格中时,更改单元格中颜色的颜色...
  14. [linux]记录内核编译日志
  15. Layui同一个表单中放置两个按钮,提交问题
  16. xmos-XU208-128-QF48芯片简介
  17. Kubernetes(k8s)的Secret以密文的方式存储数据
  18. H3C-S5560交换机设置
  19. provider: SQL Network Interfaces , error: 26 - Error Locating Server / Instance
  20. 2021牛客寒假算法基础集训营1 E.三棱锥之刻

热门文章

  1. 视美泰和边缘计算社区达成合作,共同促进粤港澳大湾区边缘计算生态建设!
  2. 血的教训,都是卡巴斯基范的错
  3. CleanMyMac免费苹果MAC系统清理APP
  4. 南京邮电大学电装实习2023(计算机装配与联网版)
  5. maya骨骼显示_3DMax高级建模人物骨骼蒙皮!零基础快速入门!不要错过
  6. ahoy-onboarding
  7. 从零开发区块链应用(十二)--以太坊余额查询
  8. 工业相机飞拍模式介绍及相机曝光值计算
  9. 戴尔t20服务器主板性能好不好,戴尔电脑主板质量太差 建议谨慎购买(图)
  10. ABC:第一台电子计算机