`
guibin
  • 浏览: 363642 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java NIO 入门(二)Channels and buffers(通道和缓冲)

    博客分类:
  • Java
阅读更多
Java NIO 入门(二)Channels and buffers(通道和缓冲)
guibin.beijing@gmail.com

概述
Channel和Buffer是NIO中最核心的对象,他们用在几乎每一个NIO的操作上。

Channel模拟了老IO包中的流的概念。所有去任何地方(或者来自任何地方)的数据都必须通过Channel对象。Buffer本质上说是一个容器对象。任何发送到Channel的数据都必须先放进Buffer,类似的,任何从Channel中读出的数据都先读进Buffer。

在本节中你将学会在NIO中使用Channel和Buffer。

什么是Buffer?
Buffer就是一个装载数据的容器对象,数据从Buffer中读出,或者把数据写入Buffer中。在NIO中添加了Buffer对象,这是NIO和老IO最重要的区别。在面向流的I/O中,你可以把数据直接写入Stream对象,或者直接把数据从Stream中读出来,而不需要任何容器。

Buffer本质上就是一个数组(array)。通常它是一个字节数组,或者其他种类的可用数组。但是Buffer除了是一个数组之外,它还提供了结构化的访问数据的方法,并且还用来跟踪系统的读/写过程。

Buffer的种类
最通常使用的Buffer是ByteBuffer。ByteBuffer允许get/set(也就是读取/写入字节)操作底层的字节数组。

ByteBuffer不是NIO中唯一的buffer,实际上对每种JAVA原生类型都对应一个相应的Buffer。
  • ByteBuffer
  • CharBuffer
  • ShortBuffer
  • IntBuffer
  • LongBuffer
  • FloatBuffer
  • DoubleBuffer

每种类型的Buffer类都是Buffer接口的一个实例。除了ByteBuffer之外,每个Buffer都有完全一样的操作,区别仅仅在于他们操作的数据类型。因为ByteBuffer用于绝大多数标准的I/O操作,它除了具有其他类型Buffer共有的操作之外,还有一些个性的操作。

什么是Channel?
Channel是这样一个对象:你可以从Channel中读取数据,并且你也可以从Channel中写入数据。NIO与老的IO相比而言,Channel就如同Stream。

就像之前提到的,所有被NIO处理的数据都必须通过Buffer对象,而不能直接将任何字节写入Channel;而是必须先将数据写入Buffer。Buffer中可以包含少到一个字节,多到任何字节数目。相似的,也不能直接从Channel中读取任何字节,必须首先通过Channel将数据读入Buffer,然后再从Buffer中获取数据。

Channel的种类
Channel与Stream的区别在于:Channel是双向的,而Stream只能是单向的(Stream必须是InputStream或者OutpugStream的一个子类,即要么是输入流,要么是输出流,不能即输入又输出),而Channel再被打开之后,即可以读,也可以写,或者同时进行读写操作

因为Channel是双向的,因此它比Stream更好的反应了底层操作系统IO的实质。特别是在Linux系统中,底层操作系统都是双向的。

本文参考自http://www.cs.brown.edu/courses/cs161/papers/j-nio-ltr.pdf

1
1
分享到:
评论

相关推荐

    java NIO 视频教程

    Java NIO: Channels and Buffers(通道和缓冲区) 标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。 ...

    java nio教程pdf

    Java NIO: Channels and Buffers(通道和缓冲区) 标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。 ...

    java nio入门学习,两个pdf

    java nio入门学习,两个pdfjava nio入门学习,两个pdf

    java nio 入门

    java nio 入门,来自于IBM中文站

    JavaNIO chm帮助文档

    Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六) Selector Java NIO系列教程(七) ...

    java NIO和java并发编程的书籍

    java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java...

    Java NIO入门

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

    Java NIO入门的源码

    这是用于JAVA NIO入门教程的源码,直接看也能学到不少哦

    Java IO, NIO and NIO.2 原版pdf by Friesen

    You explore buffers, channels, selectors, regular expressions, charsets, and formatters. (Formatters were not introduced with the other NIO types in Java 1.4 because they depend on the variable ...

    java NIO入门(中英+代码)

    java NIO入门适合入门j

    java nio 包读取超大数据文件

    Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据...

    Java NIO英文高清原版

    Java NIO英文高清原版

    NIO 入门.chm,NIO 入门.chm

    NIO入门.chm NIO入门.chm NIO入门.chm

    Java NIO 中文 Java NIO 中文 Java NIO 中文文档

    Java NIO 深入探讨了 1.4 版的 I/O 新特性,并告诉您如何使用这些特性来极大地提升您所写的 Java 代码的执行效率。这本小册子就程序员所面临的有代表性的 I/O 问题作了详尽阐述,并讲解了 如何才能充分利用新的 I/O ...

    java NIO 中文版

    讲解了 JavaIO 与 JAVA NIO区别,JAVA NIO设计理念,以及JDK中java NIO中语法的使用

    java nio 实现socket

    java nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socket

    Java NIO(通道+缓冲区+选择器)

    Java NIO通道:通道基础、文件通道、Socket通道、工具类 Java NIO缓冲区:基础、缓冲区(Buffer)、创建缓冲区、直接缓冲区(DirectByteBuffer) Java NIO选择器:核心概念、选择器使用、Demo、选择器深入、

    java nio中文版

    java NIO是 java New IO 的简称,在 jdk1.4 里提供的新 api 。 Sun 官方标榜的特性如下: – 为所有的原始类型提供 (Buffer) 缓存支持。 – 字符集编码解码解决方案。 – Channel :一个新的原始 I/O 抽象。 – 支持...

    Java NIO实战开发多人聊天室

    06-Java NIO-Channel-FileChannel详解(二).mp4 08-Java NIO-Channel-ServerSocketChannel.mp4 09-Java NIO-Channel-SocketChannel.mp4 10-Java NIO-Channel-DatagramChannel.mp4 11-Java NIO-Channel-分散和聚集....

    Java Nio selector例程

    java侧起server(NioUdpServer1.java),基于Java Nio的selector 阻塞等候,一个android app(NioUdpClient1文件夹)和一个java程序(UI.java)作为两个client分别向该server发数据,server收到后分别打印收到的消息...

Global site tag (gtag.js) - Google Analytics