java NIO基础知识
来源:互联网 发布:中国海关统计数据库 编辑:程序博客网 时间:2024/04/30 11:08
java NIO(New IO)是一个可以替代标准Java IO API的IO API(Java1.4开始),Java NIO提供了与标准IO不同的IO工作方式。NIO弥补了原来的I/O的不足,它在标准Java代码中提供了高速的、面向块的I/O。通过定义包含数据的类,以及通过以块的形式处理这些数据,NIO不用使用本机代码就可以利用低级优化,这是原来的1/O包无法做到的。
I/O简介
在java编程中,直到最近一直使用流的方式完成I/O。所有I/O都被视为单个的字节的移动,通过一个称为Stream的对象一次移动一个字节。
NIO与原来的I/O有同样的作用和目的,但是它使用不同的方式,即:块I/O。快I/O的效率可以比流I/O高很多。
使用NIO的目的
NIO的创建目的是为了让Java程序员可以实现高速I/O而无需编写自定义的本机代码。NIO将最耗时的I/O操作(即填充和提取缓冲区)转移回操作系统,因而可以极大地提高速度。
流与块的比较
面向流的I/O系统一次一个字节地处理数据。一个输入流产生一个字节的数据,一个输出流消费一个字节的数据。为流式数据创建过滤器非常容易。链接几个过滤器,以便每个过滤器只负责单个复杂处理机制的一部分,这也是相对简单的。不利的一面是,面向流的I/O通常相当慢。
一个面向块的I/O系统以块的形式处理数据。每一个操作都在一步中产生或消费一个数据块。按块处理数据比按字节(流式)处理数据要快得多。但是面向块的I/O缺少一些面向流的I/O所具有的优雅性和简单性。
Java NIO的核心组成
Java NIO由以下核心部分组成:Channels、Buffers、Selectors。虽然除此之外,还有很多类和组件,但在我看来,Channels、Buffers、Selectors构成了核心的API。其他组件,如Pipe和FileLock,只不过是与三个核心组件共同使用的工具类。
Channel和Buffer
Channel有点像流,数据可以从Channel读到Buffer中,也可以从Buffer写到Channel中。如图:
Channel和Buffer有好几种类型,如下是Java NIO的一些主要Channel的实现:
- FileChannel
- DatagramChannel
- SocketChannel
- ServerSocketChannel
这些通道涵盖了UDP和TCP网络IO,以及文件IO。
以下是Java NIO里关键的Buffer实现:
- ByteBuffer
- CharBuffer
- DoubleBuffer
- FloatBuffer
- IntBuffer
- LongBuffer
- ShortBuffer
这些Buffer覆盖了你能通过IO发送的基本数据类型:byte、short、int、long、float、double、char。
Java NIO还有个MappedByteBuffer,用于表示内存映射文件。
- java.nio 基础知识
- java NIO基础知识
- Java NIO基础知识
- java NIO 基础知识
- java NIO基础知识
- Java NIO基础知识
- Java NIO基础知识整理(一)
- Java基础知识总结(二)——NIO
- android nio基础知识
- NIO 基础知识学习
- Java NIO: NIO概述
- Java NIO:NIO概述
- Java NIO:NIO概述
- Java NIO:NIO概述
- Java NIO:NIO概述
- Java NIO:NIO概述
- Java NIO:NIO概述
- Java NIO:NIO概述
- iOS coretext框架第一章 基础知识
- 从今天开始,拼命把自己锻炼成一个软件人才,立此博以铭志
- Objective-C MVC MVVM MVP
- java工具,框架等的历史版本下载页面
- js中的正则表达式入门
- java NIO基础知识
- POJ3281 Dining
- matlab更改colorbar字体的大小,设置范围
- 团体程序设计天梯赛-练习集-L3-007. 天梯地图(最短路)
- github + jenkins 如何不使用验证达到触发的目的
- get_scan_count
- CAMShift_OpenCV_Python
- 内核中的锁机制
- dubbo原理解析