美文网首页
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模型

    Java中的IO模型 Java中的IO模型有四种: 同步阻塞IO 同步非阻塞IO IO多路复用 异步IO 其中IO...

  • IO

    一 IO中各个流的基本用法 参考: java中的IO整理 二 IO体系 参考:看完这个,Java IO从此不在难 ...

  • 10. Java IO: Readers and Writers

    想要查看此教程的目录请点击:Java IO教程目录贴地址 Java IO中的java.io.Reader和java...

  • 详解IO复用模型select,poll,epoll机制

    在Java中,主要有三种IO模型,分别是阻塞IO(BIO)、非阻塞IO(NIO)和 异步IO(AIO)。Java中...

  • Java I/O 1.1

    Java IO一般大家常说的IO分为两个部分: 1.java.io包中堵塞型IO(BIO);2.java.nio包...

  • Java网络编程:Netty框架学习(二)---Java NIO

    概述 上篇中已经讲到Java中的NIO类库,Java中也称New IO,类库的目标就是要让Java支持非阻塞IO,...

  • 从源码设计角度理解Java IO

    概述 Java的核心库java.io提供了全面的IO接口。包括:文件读写、标准设备输出等。Java中IO是以流为基...

  • NIO与BIO的区别

    BIO的概念又称Java IO,是java.io包中的InputStream、OutputStream这种同步、阻...

  • Java知识梳理三

    一、Java中的IO 1.IO的概述 Java IO方式有很多种,基于不同的IO抽象模型和交互方式,可以进行...

  • Java IO & NIO & NIO2

    概览 IO是Java中的最重要的一个部分. 其中, java.io是所有编程者都应该掌握的IO方式. 在Java ...

网友评论

      本文标题:Java中的IO

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