`
vipygt
  • 浏览: 34743 次
社区版块
存档分类
最新评论

java.nio的学习笔记

 
阅读更多

1.背景:java.nio相对于java.io中的一些缺点,比如block服务,传送效率,提供了一些新的特点比如多线程的存取安全性、提供缓存buffered、字符集编码解决方案以及一种新的I/O抽象(实现了channel接口)。 原来的 I/O 以流的方式处理数据,而 NIO 以块的方式处理数据。

2.本质上用channel和buffer来实现数据的读写。buffer是I/O的中转地,channel是源头或目的地,是buffer对象的唯一接口

通过一个小例子可以看到,相对于I/O,NIO进行了buffer、channel的一些中间件的通道设置,先设置一个ByteBuffer,通过一个FileChannel的read()方法将FileChannel的data读取进buffer里面,然后再通过FileChannel的write方法将buffer中的data读取进FileChannel中。之后FileChannel会自动将数据写进FileOutputStream继而写进File中。此处注意:在读取data进buffer之前要进行Buffer的clear,写进FileChannel之前,要进行Buffer的Flip。关于clear的机制:Buffer的属性有position、limit、capacity,读的模式下,比如读取一个CharBuffer,是从position的位置开始读取,然后读取到limit的位置,所以一般读取之前,可以调用Buffer.clear()方法,将position设置为0,limit设置为capacity的值。注意clear方法只是改变缓冲区的索引,并非进行清空。而flip恰恰相反,flip是为了将buffer调整为数据传出状态,将limit设置为position的当前值,将position设置为0.另外还有rewind方法,将数据的positon设置为0,与flip的区别是limit不变。


3.比较nio与io中的区别。在面向流的IO中,所有的数据都是直接读到stream中,而在nio中所有的数据都是用缓冲区处理的,任何情况下访问数据都是用缓冲区处理的,缓冲区可以是一个数组,通常是字节数组,但它不仅仅是数组,它提供了数据访问机制。Channel是一个对象,用它可以读取或写入数据,与stream最大的区别就是它不仅仅能够写还能够读,它是双向的。

4.对于网络通讯的应用,获取一个SocketAddress,然后得到一个SocketChannel,然后用SocketChannel的write,再用buffer完成存取。

5.关于阻塞式的改进,以前的阻塞式比如accept会阻塞,线程需要每隔一定时间进行上下文切换,找到目的地结果,而非阻塞里面线程都在休眠,只有在真正外部环境准备好的情况下才会唤醒。原理是由一个专门的线程来处理所有的IO事件,并负责分发。事件驱动机制:事件到的时候触发,而不是同步的监测事件。线程之间通讯是通过wait,notify等方式进行。

6.Slector,异步IO的核心类,它能检测一个或多个通道上的事件,并将事件分发出去,使用一个selector线程能监听多个通道上的事件,并不需要为一个channel分配一个线程。

分享到:
评论

相关推荐

    Java NIO学习笔记——ByteBuffer用法

    ByteBuffer的用法是Java NIO学习中的核心内容。 首先,我们了解下ByteBuffer的基本概念。ByteBuffer是一个字节缓冲区,可以存储字节序列。在NIO中,所有的数据读写都通过缓冲区进行,ByteBuffer与其他类型的Buffer...

    JAVA NIO学习笔记.docx

    Java NIO(New Input/Output)是Java标准库在JDK 1.4引入的一组新的I/O API,它提供了一种不同于传统IO的高效、非阻塞的I/O操作方式。NIO的核心概念包括Channel、Buffer和Selector,它们共同构建了一个与操作系统...

    良葛格Java JDK 5[1].0学习笔记

    Java JDK 5.0是Java开发工具包的一个重要版本,由Sun Microsystems(后被Oracle收购)于2004年发布。...通过阅读“良葛格Java JDK 5.0学习笔记”,读者可以系统地学习和掌握这些内容,进一步提升自己的Java编程技能。

    java学习笔记1(java io/nio)

    java学习笔记1(java io/nio)设计模式

    Java JDK 7学习笔记 PDF

    这个PDF学习笔记是开发者深入理解JDK 7特性和功能的重要参考资料。以下是对Java JDK 7的一些核心知识点的详细阐述: 1. **泛型改进**:在JDK 7中,泛型的使用更加灵活,引入了类型推断(Type Inference)特性,通过...

    javaNIO学习笔记

    ### Java NIO 学习笔记 #### 一、概述 Java NIO (Non-Blocking IO,也称为 Java New IO),是 Java 对传统 IO 模型的一次重大改进,旨在提高程序处理大量并发连接的能力。NIO 的核心组件包括 Channels、Buffers 和 ...

    nio demo for nio学习笔记(体系结构以及模块介绍)

    **NIO(Non-blocking Input/Output)**是Java在1.4版本引入的一种新的I/O模型,它提供了与传统I/O不同的数据处理方式。在传统的IO模型中,数据的读写是阻塞式的,即在读取或写入数据时,程序会暂停执行,等待数据...

    javaNIO.xmind

    自己总结的java中NIO的笔记,绘制了详细的思维导图,每个思维导图中均有详细的博文解释,方便大家学习和理解,免费分享给大家。适合java的爱好者和学习者

    java NIO学习系列 笔记

    Java NIO(New Input/Output)是Java标准库在JDK 1.4版本中引入的一个新特性,它提供了一种不同于传统IO流的高效I/O处理方式。NIO的核心概念包括通道(Channel)和缓冲区(Buffer),这两个组件使得数据以块的形式...

    Java JDK 6学习笔记.zip

    这个压缩包“Java JDK 6学习笔记.zip”显然是一个包含有关Java JDK 6深入学习资源的集合,可能是PDF文档、笔记或者其他形式的教学材料。 在Java JDK 6中,有几个关键的特性值得我们关注: 1. **改进的性能**:JDK ...

    Javajdk5学习笔记

    以下是对"Javajdk5学习笔记"中可能包含的知识点的详细解析: 1. **自动装箱与拆箱**:JDK 5引入了自动装箱和拆箱功能,使得基本类型和它们对应的包装类之间可以无缝转换,提高了代码的简洁性。例如,`Integer i = ...

    javaNIO学习笔记(csdn)————程序.pdf

    Java NIO,全称Non-Blocking Input/Output,是非阻塞式输入输出,它是Java从1.4版本开始引入的一种新的I/O模型,为Java程序员提供了处理I/O操作的新方式。NIO的主要特点是其能够使Java程序以更有效的方式处理I/O流,...

    良葛格Java_JDK_5[1].0学习笔记

    【标题】:“良葛格Java_JDK_5[1].0学习笔记”指的是一个关于Java JDK 5.0版本的学习资料集合,由“良葛格”这位作者或教育者整理。这个标题暗示了内容可能包括对Java编程语言的深入解析,特别是针对JDK 5.0版本中的...

    良葛格Java JDK 5.0学习笔记

    Java JDK 5.0是Java发展历程中的一个重要里程碑,它引入了许多新特性,极大地提升了开发效率和代码质量。..."良葛格Java JDK 5.0学习笔记"这份资料应该会详细解释这些概念,为初学者提供宝贵的参考资料。

    Java JDK 7学习笔记 完整扫描版

    **Java JDK 7学习笔记概述** Java JDK 7(Java Development Kit 7)是Java编程语言的一个重要版本,由Sun Microsystems(后被Oracle公司收购)开发,并于2011年7月28日正式发布。这个版本引入了一系列新特性、改进...

    《java学习》-java学习笔记.zip

    这份《java学习》笔记包含了多个核心主题,旨在帮助初学者和有经验的开发者深入理解和掌握Java技术。 1. **正则表达式(正则.md)**: 正则表达式在Java中用于文本匹配和搜索,是处理字符串的强大工具。Java提供了...

    Java JDK 6学习笔记——ppt简体版

    Java JDK 6学习笔记是为Java初学者量身定制的一份宝贵资料,它涵盖了Java编程的基础概念、语法以及核心特性。这份PPT简体版旨在帮助读者快速掌握Java开发的基本技能,逐步成为一名合格的Java程序员。 Java JDK...

    java面试笔试题库java学习笔记开发教程互联网公司面试资料大全合集.zip

    java_Java_学习笔记.pdf Java_Performance.pdf java代码效率优化.docx Java内存模型的历史变迁.docx Java在游戏服务器开发中的应用.docx java基础总结大全.txt Java开发与技术挑战——关于技术的技术思考.docx Java...

    JAVA课程学习笔记.doc

    本篇学习笔记将深入解析Java线程池的框架、结构、原理以及相关源码,帮助读者全面理解线程池的工作机制。 1. 线程池模块结构 线程池框架分为多层结构,其中包括核心实现类、辅助类和接口等组件。例如,`sun.nio.ch....

Global site tag (gtag.js) - Google Analytics