JAVA基础(10)——IO、NIO

Java中的IO与NIO面试题 1、Java 中 IO 流? Java 中 IO 流分为几种? 按照流的流向分,可以分为输入流和输出流; 按照操作单元划分,可以划分为字节流和字符流; 按照流的角色划分为节点流和处理流。 Java Io 流共涉及 40 多个类,这些类看上去很杂乱,但实际上很有规则,而且彼此之间存在非常紧密的联系, Java I0 流的 40 多个类都是从如下 4 个抽象类基类中派生出来的。 InputStrea... 阅读详情

JAVA基础系列规划:


IO 是主存和外部设备 ( 硬盘、终端和网络等 ) 拷贝数据的过程。 IO 是操作系统的底层功能实现,底层通过 I/O 指令进行完成。

1. 标准IO

Java 标准 IO 类库是 io 面向对象的一种抽象。基于本地方法的底层实现,我们无须关注底层实现。

从处理数据类型上,可以分为字节流和字符流;从数据流向上,可以分为输入流和输出流。

-字节流字符流
输入流InputStreaReader
输出流OutputStreamWriter

字节流均继承自InputStream和OutputStream这两个抽象类。字符流均继承自Reader和Writer这两个抽象类。

字节流和字符流的区别,除了读写单位和处理对象不同外,在文件操作中,字节流在操作时不使用缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件。

输入流和输出流的区别在于流向上,流入程序的为输入,从程序流出的为输出。

Java 标准 IO 类库提供了数量众多的封装类,为了更加从容的使用这些类,使用标准IO时可以参考以下原则:

  1. 考虑最原始的数据格式是什么
    • 二进制格式(只要不能确定是纯文本的),使用InputStream/OutputStream类的子类。
    • 纯文本格式(含纯英文与汉字或其他编码方式),使用Reader/Writer类型子类。
  2. 数据方向
    • 输入,使用Reader/InputStream类的子类
    • 输出,使用Writer/OutputStream类的子类
  3. 是否需要转换流
    • 若需要Stream -> Reader/Writer,使用InputStreamReader/OutputStreamWriter。
  4. 数据来源
    • 文件: FileInputStream、 FileOutputStream、FileReader、FileWriter
    • byte[]:ByteArrayInputStream、ByteArrayOutputStream
    • Char[]:CharArrayReader、 CharArrayWriter
    • String:StringBufferInputStream、StringBufferOuputStream、StringReader、StringWriter
    • 网络数据流:InputStream、OutputStream、Reader、Writer
  5. 是否需要用到缓冲区
    • BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter
  6. 是否有特殊需要
    • 格式化输出:PrintStream、PrintWriter
    • 对象输入输出: ObjectInputStream、ObjectOutputStream
    • 进程间通信: PipeInputStream、PipeOutputStream、PipeReader、PipeWriter
    • 合并输入: SequenceInputStream
    • 更特殊的需要: PushbackInputStream、PushbackReader、LineNumberInputStream、LineNumberReader

操作示例可参考《java中的IO整理》

2. NIO

Java NIO是JDK1.4之后新出的一套IO接口,这里的的新是相对于原有标准的Java IO和Java Networking接口。NIO提供了一种完全不同的操作方式:

  • Channel和Buffer

    标准IO的编程接口是面向字节流和字符流的。而NIO是面向通道和缓冲区的,数据总是从通道中读到Buffer缓冲区内,或者从Buffer写入到通道中。

    Buffer。Buffer是一块连续的内存块,是NIO数据读或写的中转地,其只能和Channel对接。

    Channel。Channel是数据的源头或者目的地,用于向Buffer提供数据或者读取Buffer数据,Buffer的唯一接口,支持异步IO。

  • Non-blocking

    NIO中的N可以理解为Non-blocking,不单纯是New。Java NIO使我们可以进行非阻塞IO操作。比如说,单线程中从通道读取数据到buffer,同时可以继续做别的事情,当数据读取到buffer中后,线程再继续处理数据。写数据也是一样的。

  • Selectors

    Selector可以检测多个通道的事件状态(例如:链接打开,数据到达),这样单线程就可以操作多个通道的数据,实现多路 (non-bloking) 非阻塞式的高伸缩性网络 I/O 。

具体使用方法请参考《Java NIO 教程》

JAVA IO、BIO、NIO、AIO及零拷贝 阅读详情

相关推荐

Win11实时字幕还能这么玩?手把手教你打造专属‘AI字幕机’,告别视频网站无字幕困扰

本文详细介绍了如何利用Win11的实时字幕功能打造全平台通用的AI字幕系统。通过C#抓取程序、Node.js中转服务和前端展示界面的组合,实现自动抓取系统字幕并实时推送到任意网页视频的方案,有效解决在线视频无字幕的困扰。

weixin_33735077的博客 389

Java IO/NIO

在Java程序中,对于数据的输入/输出以”流”(Stream)方式进行 java.io 包定义了多个流类型:   1) 按数据流方向分为 – 输入流和输出流   2) 按数据单位分为 – 字节流和字符流   3) 按功能分为 – 节点流和处理流所有流类型均位于java.io包内,分别继承以下四种抽象流类型:       字节流      字符流 输入流   InputStr

cyhe2010的博客 1123

英语语法-句法

摘要:本文系统梳理了英语句法知识,重点解析了五种基本句型及其扩展结构。内容包括句子类型(陈述句、疑问句、祈使句、感叹句)、复合句构成(从句分类与连词使用)、特殊句型(倒装、强调、引语转换)等。特别强调句子成分分析技巧,指出每种句子成分可由不同词法单元充当,需掌握成分识别与划分方法。文章还提供了往期语法系列链接,形成完整的英语语法学习体系,帮助读者建立从词法到句法的系统认知框架。

STCNXPARM的博客 8795

Java 中的IO/NIO详解

一:Java IO 模型 兄弟们,什么是Java的IO呢?首先我们看看这两个单词的全拼,不就是Input 和Output嘛?那么到底是什么的输入和输出呢?本质上在互联网的世界中,不就是数据的输入输出吗?而我们java 中对于数据的这个输入和输出都是基于线程来说的,那么线程在接收这个数据的输入和输出的时候线程的状态是怎么样的呢,在一直等待还是说先干自己的事,等数据来了再去接收这个数据呢?所以这个就涉及到了我们的这个IO模型了。它分为下面几种

weixin_41188932的博客 580

深入Linux内核:PTP硬件时间戳(HW Timestamp)是如何炼成的?

本文深入探讨了Linux内核中PTP硬件时间戳(HW Timestamp)的实现原理与实战应用。通过分析IEEE 1588协议在网络时间同步中的关键作用,详细解析了硬件时间戳在Linux内核中的架构设计、驱动开发及性能优化技巧,帮助开发者实现纳秒级精度的时间同步。

weixin_30727835的博客 650

加法器设计—— 原理图与VHDL设计初步

1、在DE2-115开发板上,完成4位全加器系统的设计、下载和功能演示,并在FPGA上实现1位全加器;2、完成3-8译码器的设计、下载和功能演示(利用板上的8段数码管)本次实验在组合逻辑电路的基础上,运用Verilog编程实现了四位全加器和3-8译码器的设计,同时实现了在DE2-115开发板上的下载和功能演示。整个过程加深了我对电路设计和Verilog编程的理解,同时也锻炼了解决问题的能力。

m0_74749526的博客 1233

Java IO 与 NIO 深入理解:数据传输与处理

IO(输入/输出)是计算机科学中的一个基本概念,涉及数据的读取和写入。在 Java 中,IO 操作主要通过java.io包中的类来实现。NIO(New IO)是 Java 1.4 引入的一套新的 IO 处理方式,旨在解决传统 IO 的一些限制。它位于java.nio包中,提供了一种更灵活的方式来处理 IO 操作。本文对 Java IO 和 NIO 进行了深入的分析与比较。Java IO 适合简单的、低并发的场景,而 NIO 则在高并发和复杂的 IO 操作中表现优异。

一名热衷于技术的全栈开发者,专注于前端与后端的全面技术探索。在这里,我将分享我在技术领域的学习与成长,助力更多开发者的进步。 1242

奇异值分解(SVD)C++实现

奇异值分解SVD(紧奇异值分解,截断奇异值分解)C++实现

weixin_45804601的博客 4172

java基础:IO、NIO

Java NIO、IO https://lrh1993.gitbooks.io/android_interview_guide/content/java/basis/java-nio.html 轻松理解java中的IO与NIO https://zhuanlan.zhihu.com/p/27204492 BIO,AIO,NIO理解: https://baijiahao.baidu.com/s?id=1666632547627347318&wfr=spider&for=pc..

王温暖的博客 1524

计量经济学——事件研究法/事件分析法

计量经济学——事件研究法/事件分析法

weixin_46189461的博客 6751

保姆级教程:用CellOracle 0.10.13从单细胞数据构建基因调控网络(附完整代码)

本文提供了一份详细的CellOracle 0.10.13使用指南,帮助用户从单细胞数据构建基因调控网络。通过Python接口,即使是生物信息学新手也能快速掌握数据准备、KNN插补、GRN计算及可视化等关键步骤。文章包含完整代码和实用技巧,助力单细胞转录组数据分析。

weixin_42563415的博客 720

《JAVA核心知识》学习笔记(JVM)-1

JVM (1) 基本概念: JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、 一个垃圾回收,堆 和 一个存储方法域。 JVM 是运行在操作系统之上的,它与硬件没有直接 的交互 Hotspot JVM 后台运行的系统线程主要有下面几个: ...

chongyi1654的博客 496

Android13无重力感应系统修改触摸屏跟随屏幕显示旋转方向旋转

在实际产品中设计时会移除重力传感器。当设备缺少重力传感器时,系统无法使用该传感器提供的方向数据来确定屏幕旋转的方向。Android 系统中由于移除重力传感器导致的默认显示方向旋转引起触摸屏与屏幕显示不一致问题,主要是由于缺乏方向检测和触摸坐标的正确转换。通过使用替代传感器(如陀螺仪)、手动配置方向、调整触摸事件坐标和 UI 布局,可以解决这个问题。开发者需要确保在设备没有重力传感器的情况下,能够通过其他方法推测方向,并确保触摸事件和 UI 动作能够正确响应设备的旋转。

weixin_35723192的博客 802

Java IO和NIO

转载请注明链接: Java提供了哪些IO方式? NIO如何实现多路复用? Java IO和NIO 版本号:2018/9/12-1(18:24) Java IO和NIO 基本概念 同步和异步 阻塞和非阻塞 IO/BIO NIO NIO2 问题汇总 参考资料 基本概念 1、Java IO方式有哪些? 传统java.io包:文件...

feather(猎羽) 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java中IO和NIO的区别

一、概念   NIO即New IO,这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多。在Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。 二、NIO和IO的主要区别 下表总结了Java IO和NIO之间的主要区别: 1、面向流与面向缓冲    Java IO和NIO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每次从流中读一个或多个字

weixin_42100694的博客 7345

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java IO与NIO的区别、BIO、NIO、AIO

https://www.cnblogs.com/aspirant/p/8630283.html 一、概念 NIO即New IO,这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多。 在Java API中提供了两套NIO, 一套是针对标准输入输出NIO 另一套就是网络编程NIO 二、NIO和IO的主要区别 下表总...

try to do 4268

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java-IO:浅谈对NIO的认识

NIO即New IO,这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO 主要用到的是块,所以NIO的效率要比IO高很多。在Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。

王小二(海阔天空) 2600

Java IO 和 NIO的区别

主要区别 IO NIO 面向字节流 面向缓冲区 阻塞 基于Selector的非阻塞 Java IO 和 NIO的主要区别体现在以上两个方面,以下详细说明这些区别的具体含义。面向流和面向缓冲区这个概念和编程方法中的面向过程、面向对象类似。Java IO 是面向流的而Java NIO是面向缓冲区的。在Java IO中读取数据和写入数据是面向流(Stream)的,这表示当我们从流中读

riskLoveHe的博客 8763

java基础——java io与nio:从基础到实践

本文全面介绍了Java I/O系统的核心概念与应用。首先详细解析了字节流和字符流两大类IO流,包括FileInputStream/FileOutputStream、Buffered流等常用类的使用方法。随后深入讲解了五种I/O模型,重点分析了每种模型的实现机制、适用场景及Java中的具体实现方式。文章还介绍了NIO的核心组件(Buffer、Channel、Selector)及其相比传统IO的优势,包括非阻塞特性、多路复用机制和高效缓冲区等。最后总结了不同I/O技术的适用场景,帮助开发者根据实际需求选择合方案

qq_47980550的博客 1324

Java IO 与 NIO

Java IO 与 NIO。

专注分享编程开发与技术进阶干货! 1232

Java NIO 与 IO之间的区别

本文将NIO与IO进行了对比;介绍了NIO的一般使用方式

evan_man的专栏 2万+

Java中IO和NIO的本质和区别

终于要写到java中最最让人激动的部分了IO和NIO。IO的全称是input output,是java程序跟外部世界交流的桥梁,IO指的是java.io包中的所有类,他们是从java1.0开始就存在的。NIO叫做new IO,是在java1.4中引入的新一代IO。 IO的本质是什么呢?它和NIO有什么区别呢?我们该怎么学习IO和NIO呢? 别急,看完这篇文章一切都有答案。

程序那些事 9539

java面试中经常会问到的IO、NIO问题有哪些(基础版)

IO/NIO 面试重点考察BIO 与 NIO 的本质区别NIO 三大组件的协作原理非阻塞与多路复用的实现及高并发场景下的 IO 模型选择。回答时需结合底层机制(如系统调用、内核态/用户态)和实战场景(如 Netty 的应用),体现对高性能 IO 的理解。

青鱼入云的博客 1220

Java IO流与NIO终极指南:从基础到高级应用

IO(Input/Output)流是Java中用于处理输入输出的核心机制,它像水流一样将数据从源头(如文件、网络连接等)传输到目的地。Java IO流主要分为字节流和字符流两大类。通俗理解:想象IO流就像水管,数据就是水流。字节流是原始的水流(二进制数据),字符流则是经过处理的可直接饮用的水(文本数据)。Java IO和NIO提供了丰富的API来处理各种输入输出需求。传统IO简单易用,适合大多数常规场景;NIO则提供了更高的性能和灵活性,特别适合高并发和大数据量处理。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1174

Java IO与NIO的区别

NIO即New IO,这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多。在Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。NIO和IO的主要区别,下表总结了Java IO和NIO之间的主要区别: 2. Java IO与NIO的区别 1、面向流与面向缓冲   Java IO和NIO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每次从流中读

靖节先生的博客 2611
上一篇: JAVA基础(11)——泛型
下一篇: JAVA基础(1)——基本概念
白水不开
博客等级 码龄18年 91粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值