美文网首页
JavaL-11: IO和NIO

JavaL-11: IO和NIO

作者: WenxuanLi | 来源:发表于2019-04-17 07:18 被阅读0次

李文轩 2019-04-16
声明:这是本人学习极客时间的Java核心36讲的笔记,有侵权请联系我。


IO、NIO、NIO 2(AIO)

  1. java.io包,基于流模型视线。交互方式为同步阻塞的方式;在读取输入或写入输出流时,完成前,线程会一直阻塞,它们之间的调用是可靠性的线性顺序。
    • 优点:直观,简单
    • 缺点:IO效率和扩展局限性
  2. jave.nio包,可构建多路用且同步非阻塞的IO程序;提供了接近系统底层的高性能数据操作方式。
  3. Asynchronous IO,异步非阻塞。异步IO操作基于事件和回调机制,应用操作直接返回,不会阻塞。

同步和异步

  • 同步:可靠的有序运行机制,当进行同步操作时,后续任务时等待当前调用返回,才会进行下一步。
  • 异步:其他任务不需要等待当前调用当返回,通常依靠事件和回调等机制来实现任务次序关系。

阻塞与非阻塞

  • 阻塞:在阻塞操作中,当前线程会处于阻塞状态,无法进行其他任务,当条件就绪才能继续(像读取或者写入操作完成)

  • 非阻塞:不管IO操作是否结束,直接返回,相应当操作将在后台继续处理。

  • 同步或阻塞不一定就是低效的,按使用场景做分析


IO 的知识点

  • IO不仅是对文件的操作,还是在网络编程中的IO操作

  • 输入输出流(InputStream/OutputStream )用于读取或写入字节,例如操作图片文件

  • Reader/Writer 用于操作字符,增加了字符编解码等功能。

  • BufferedOutputStream等带缓冲区的实现,可以避免频繁的磁盘读写,提好IO处理效率

  • 很多IO工具都实现了Cloneable 接口,目的是进行资源的释放;需要利用try-with-resource / try-finally等保护机制保证IO工具明确关闭。


Java NIO

主要组成部分:

  • Buffer,高效的数据容器,除了Boolean 所有原始数据类型都有相应的 Buffer 实现。
  • Channel,类似在操作系统上看到的文件描述符,是被用来支持批量式生产 IO 操作的一种抽象。
  • Selector,NIO 多路复用的基础。它可以检测到注册在 Selector 上多个 Channel 中,是否有 Channel处于就绪状态。也实现了单线程对多 Channel 的高效管理。
  • Chartset,提供 Unicode 字符串定义,NIO也提供了相应的编解码器等。

NIO和多路复用的目的:

  • Java中的线程是重量级的,启动或者销毁一个线程是有明显开销的。
  • 每个线程都有单独的线程栈等结构,需要占用的内存较多。

相关文章

  • JavaL-11: IO和NIO

    李文轩 2019-04-16声明:这是本人学习极客时间的Java核心36讲的笔记,有侵权请联系我。 IO、NIO、...

  • IO/NIO/AIO & Netty

    IO/NIO/AIO 的区别: IO和NIO 又称为Blocking IO 和 No Blocking IO 即为...

  • Java NIO

    1、IO和NIO的区别? 1)IO面向流、NIO面向缓冲;2)IO是阻塞IO、NIO是非阻塞IO;3)无 与 选择...

  • Java NIO 和 IO 之间的主要差别

    NIO 和 IO 之间的主要差别 IO NIO 面向流 面向缓冲 阻塞IO 非阻塞IO 无 ...

  • java NIO详解

    NIO原理 NIO与IO的区别 首先来讲一下传统的IO和NIO的区别,传统的IO又称BIO,即阻塞式IO,NIO就...

  • 3 java的IO

    java nio Java的IO体系:旧IO新IO:nio,用ByteBuffer和FileChannel读写ni...

  • Java常见面试题汇总-----------Java基础(NIO

    18. NIO与IO的区别   NIO即New IO,这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和...

  • IO、NIO

    IO、NIO Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO...

  • 29、 Java IO与 NIO的区别(补充)

    Java IO与 NIO的区别(补充) NIO即New IO,这个库是在JDK1.4中才引入的。NIO和IO有相同...

  • Netty深入浅出(一)入门

    传统Socket中,NIO和IO的比较(Nio知识回顾) IO 阻塞点: server.accept(); 和单线...

网友评论

      本文标题:JavaL-11: IO和NIO

      本文链接:https://www.haomeiwen.com/subject/cbnwwqtx.html