`

努力的方向 之一 NIO

    博客分类:
  • java
 
阅读更多

1.   基本 概念
IO 是主存和外部设备 ( 硬盘、终端和网络等 ) 拷贝数据的过程。 IO 是操作系统的底层功能实现,底层通过 I/O 指令进行完成。
所有语言运行时系统提供执行 I/O 较高级别的工具。 (c 的 printf scanf,java 的面向对象封装 )
2.    Java 标准 io 回顾
Java 标准 IO 类库是 io 面向对象的一种抽象。基于本地方法的底层实现,我们无须关注底层实现。 InputStream\OutputStream( 字节流 ) :一次传送一个字节。 Reader\Writer( 字符流 ) :一次一个字符。
3.    nio 简介
nio 是 java New IO 的简称,在 jdk1.4 里提供的新 api 。 Sun 官方标榜的特性如下:
–     为所有的原始类型提供 (Buffer) 缓存支持。
–     字符集编码解码解决方案。
–     Channel :一个新的原始 I/O 抽象。
–     支持锁和内存映射文件的文件访问接口。
–     提供多路 (non-bloking) 非阻塞式的高伸缩性网络 I/O 。
本文将围绕这几个特性进行学习和介绍。
4.   Buffer&Chanel
Channel 和 buffer 是 NIO 是两个最基本的数据类型抽象。
Buffer:
–        是一块连续的内存块。
–        是 NIO 数据读或写的中转地。
Channel:
–        数据的源头或者数据的目的地
–        用于向 buffer 提供数据或者读取 buffer 数据 ,buffer 对象的唯一接口。
–         异步 I/O 支持

图1:channel和buffer关系

分享到:
评论
3 楼 sblig 2012-03-31  
其中 buffer 内部结构如下 ( 下图拷贝自资料 ):
2 楼 sblig 2012-03-31  
//第一个例子 利用通道 FileChannel 进行读写 文件
String infile = "C:\\copy.sql";  
        String outfile = "C:\\copy.txt";  
        // 获取源文件和目标文件的输入输出流  
        FileInputStream fin = new FileInputStream(infile);  
        FileOutputStream fout = new FileOutputStream(outfile);  
        // 获取输入输出通道  
        FileChannel fcin = fin.getChannel();  
        FileChannel fcout = fout.getChannel();  
        // 创建缓冲区  
        ByteBuffer buffer = ByteBuffer.allocate(1024);  
        while (true) {  
            // clear方法重设缓冲区,使它可以接受读入的数据  
            buffer.clear();  
            // 从输入通道中将数据读到缓冲区  
            int r = fcin.read(buffer);  
            // read方法返回读取的字节数,可能为零,如果该通道已到达流的末尾,则返回-1  
            if (r == -1) {  
                break;  
            }  
            // flip方法让缓冲区可以将新读入的数据写入另一个通道  
            buffer.flip();  
            // 从输出通道中将数据写入缓冲区  
            fcout.write(buffer);  

相关推荐

    从NIO到Netty,编程实战出租车905协议-08172347.pdf

    905.4-2014协议,是交通运输部公路科学研究院起草定制的一个协议标准,它也是基于TCP之上的一个应用层传输协议。 第2章,介绍在Socket编程过程中一些基础知识,让大家建立起对这块知识内容的一个整体轮廓; 第3章,...

    尚硅谷NIO百度云连接

    NIO是非阻塞I/O模型的缩写,是Java SE 1.4版本引入的新特性之一。与传统的BIO(Blocking I/O Model)相比,NIO提供了一种更加高效的数据处理方式,尤其是在处理高并发场景时表现更佳。NIO的核心组件包括缓冲区...

    NIO需要了解的一些概念

    缓冲区是NIO体系的核心组件之一,它作为数据传输的中介,充当了应用程序与通道之间的桥梁。缓冲区本质上是一个固定大小的数据容器,由一系列的数据元素组成,这些元素可以是字节、字符、整数等类型。缓冲区不仅存储...

    PRO JAVA 7 NIO2

    在Java 7的NIO2(JSR203:Java平台上的更多新I/O API)更新中,`java.nio.file.Path` 类成为了核心组件之一,为开发者提供了更高效、更直观的文件系统操作接口。本文将详细解析 `Path` 类的功能与应用,帮助读者掌握...

    NiO掺杂对菱镁矿烧结性能的影响.docx

    在现代工业生产中,镁砂耐火材料的应用极为广泛,尤其是其在钢铁行业的多个环节中的应用,是保障产品质量和生产安全的重要因素之一。其中,菱镁矿作为一种基础原料,在烧结镁砂的制备过程中具有举足轻重的地位。为了...

    Java NIO服务器端开发详解

    通道和流的不同之处在于通道是双向的(通道可以用于读、写或者二者同时进行),流只是在一个方向上移动。通道大体上可以分为两类:用于网络读写的SelectableChannel(ServerSocketChannel 和 SocketChannel 就是其...

    java入门学习指导之最佳方向.doc

    本文档“java入门学习指导之最佳方向.doc”将为你提供一个清晰的学习路径,帮助你高效地掌握Java编程。 首先,你需要了解Java的基础概念。这包括熟悉Java的历史背景、其设计哲学以及它在软件开发中的应用领域。Java...

    Li4Ti5O12/NiO复合材料的制备及其电化学性能 (2012年)

    随着新能源技术的发展,锂离子电池作为便携式电子设备、电动汽车及储能系统的重要能源之一,其性能的提升对于推动新能源产业的进步至关重要。其中,电极材料的选择与设计是决定锂离子电池性能的关键因素之一。Li4Ti5...

    Java在高并发网络编程中的应用

    Java网络编程的核心技术之一是NIO(Non-blocking IO),它提供了比传统IO(BIO,Blocking IO)更高效的数据传输方式,特别适合于需要同时处理大量连接的场景。 NIO技术允许Java程序使用较少的线程就可以处理大量的...

    Java方向面试题,超全的。

    Java是世界上最流行的编程语言之一,尤其在企业级应用开发领域占据主导地位。本文将深入探讨Java面试中的关键知识点,涵盖J2EE、J2SE以及常见的开源框架。 1. **J2SE(Java Standard Edition)基础** - **类与对象...

    计算机专业方向的毕业论文——开题报告

    7. **Spring框架**:在企业级开发中,Spring框架是最常用的技术之一,包括依赖注入(DI)、面向切面编程(AOP)、Spring MVC、Spring Boot等模块,能够简化项目结构和提升开发效率。 8. **数据库知识**:理解SQL...

    java方向面试宝典.pdf

    Java语言是目前广泛应用的编程语言之一,其特点和优势包括:跨平台性(通过Java虚拟机JVM实现),面向对象,自动内存管理(垃圾回收机制),丰富的类库,以及强大的可移植性和安全性。Java虚拟机(JVM)是运行Java...

    Mina中文参考手册-API

    这个接口与使用传统Java NIO编码时的一个不同之处在于,它区分了IoService与IoProcessor两个功能接口,通常在Java NIO编码中,只会用到一个Selector。 3. IoFilter:提供了一组拦截器接口,可以实现日志输出、黑...

    汽车:蔚来汽车:用户体验为本,领跑智能电动.pdf

    技术创新是蔚来汽车的核心竞争力之一,公司认为智能、电动和自动驾驶是汽车行业的未来方向,并致力于持续创新以引领行业变革。在设计方面,蔚来追求打造纯粹、易用且有向往感的产品,旨在为用户提供全感官的愉悦体验...

    Netty3.x 源码解析

    3. ChannelPipeline:ChannelPipeline是Netty中的核心概念之一,负责管理和传递事件流。 4. ChannelHandler:它是业务逻辑处理的核心,不同的Handler负责不同类型的任务。 5. 编解码器:Netty提供了很多内置的编...

    java方向程序员面试资料集合,保证对你的面试有利,非常全面,涵盖j2ee,J2se,j2me,内部资料,拼命传出来的,忘各位珍惜

    Java是全球最流行的编程语言之一,特别是在企业级应用开发领域,它有着广泛的应用。这份面试资料集合涵盖了Java的三大核心平台:J2EE(Java Platform, Enterprise Edition)、J2SE(Java Platform, Standard Edition...

    金属氧化物半导体SO2气体传感器的研究现状.pdf

    金属氧化物半导体SO2气体传感器是目前检测SO2气体的主要方法之一,它们具有体积小、成本低、可实时监测等特点。近年来,国内外研究者对基于金属氧化物半导体的SO2气体传感器进行了深入研究,本文将对其进行综述。 ...

    Apache_Mina_Server_2.0中文参考手册V1.0.pdf

    3. IoFilter:这一接口定义了一系列拦截器,包括但不限于日志输出、黑名单过滤、数据编码(write方向)与解码(read方向)。其中,数据的编码与解码是最为重要的部分,也是用户在使用Mina时需要重点关注的。 4. ...

    新能源汽车行业新技术与新材料专题报告(一):预锂化与补锂添加剂【22页】.pdf

    在锂离子电池的首次充电过程中,负极的石墨表面会与电解液发生反应,形成一层固体电解质相界面(SEI)膜,这个过程会永久消耗一部分锂,导致电池的首次循环库仑效率降低,容量和能量密度也随之下降。为解决这一问题...

Global site tag (gtag.js) - Google Analytics