美文网首页
Java中的IO

Java中的IO

作者: 不是锦萧 | 来源:发表于2016-03-17 14:00 被阅读0次

    简介

    IO操作一般来讲比较耗时,可能操作本地的文件、目录,也可能操作网络上的资源,影响 IO 操作性能的主要方面是数据格式和存储的方式,Java中的IO主要在 java.io 包下,分为四个部分:

    1、基于字节操作的 I/O 接口:InputStream 和 OutputStream

    2、基于字符操作的 I/O 接口:Reader 和 Writer

    3、基于磁盘操作的 I/O 接口:File

    4、基于网络操作的 I/O 接口:Socket

    基于字节的 I/O 操作

    InputStream 是个抽象类,里面的核心方法是 read(), read(byte b[]),read(byte b[], int len, int off),用于读取底层数据的方法,可以用来读取的数据类型包括:字节数组、String对象、文件、管道、流、Internet资源,每一种资源都有相应的InputStream子类

    基于字符的 I/O 操作

    Writer和Reader操作的目的就是操作字符和不是字节

    NIO 非阻塞式 I/O

    有一个专门的线程处理 I/O 事件并负责分发;事件驱动机制,而不是同步监视事件;线程之间通过 wait/notify 通信,确保每次线程切换都有意义。

    服务端和客户端各自维护一个管理通道的对象,我们称之为selector,该对象能检测一个或多个通道 (channel) 上的事件。我们以服务端为例,如果服务端的selector上注册了读事件,某时刻客户端给服务端发送了一些数据,阻塞I/O这时会调用read()方法阻塞地读取数据,而NIO的服务端会在selector中添加一个读事件。服务端的处理线程会轮询地访问selector,如果访问selector时发现有感兴趣的事件到达,则处理这些事件,如果没有感兴趣的事件到达,则处理线程会一直阻塞直到感兴趣的事件到达为止。

    NIO 创建目的是为了让Java程序员可以实现高速I/O而无需编写自定义的本机代码。NIO将最耗时的I/O操作(即填充和提取缓冲区),转移回操作系统,因而可以极大地提高速度。

    NIO最重要的区别是数据打包和传输的方式。

    一个面向块的I/O系统以块的形式处理数据。每一个操作都在一步中产生或者消费一个数据块。按块处理数据比按(流式的)字节处理数据要快得多。但是面向块的I/O缺少一些面向流的I/O

    相关文章

      网友评论

          本文标题:Java中的IO

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