java中的NIO基础

在jdk1.4中,加入了一个新的包,java.nio.*,这个包引入了新的javaI/O库,目的是为了提高速度,实际上,旧的I/O包也使用nio重新实现过。

相对于io,nio中的这个n代表什么呢?《java编程思想》直接把小标题取名为"新I/O",另一种说法是Non-blocking的首字母,不管怎样,nio也确实是一种新的处理非阻塞的IO。

NIO的几个核心组成部分:Chennels(通道),Buffers(缓存),Selectors(选择器)。

我们可以把通道(Channel)想是一个装满水的大水缸,而缓存(Buffer)则是水桶,水桶可以装满水运送到别的地方,我们没有与水缸有直接接触,都是通过水桶(Buffer)直接交互。为了更快的运送更多的水,我们可以使用多个水桶,并可以选择(Selector)哪些水桶怎么装水,当然我们不仅可以从水缸里通过水桶取水还可以送水到水缸里。

java中主要的Channel实现:

FileChannel:用于文件IO,可以通过FileInputStream,FileOutputStream,RandomAccessFile对象的getChannel()获取文件通道。
DatagramChannel:是一个能收发UDP包的通道。使用DatagramChannel.open()打开通道。
SocketChannel:是一个连接到TCP网络套接字的通道。使用SocketChannel.open()获取。
ServerSocketChannel:是一个针对面向流的侦听套接字的可选择通道,使用ServerSocketChannel.open()获取。

时间: 2024-10-27 17:44:10

java中的NIO基础的相关文章

Java中的NIO基础知识

上一篇介绍了五种NIO模型,本篇将介绍Java中的NIO类库,为学习netty做好铺垫 Java NIO 由3个核心组成,分别是Channels,Buffers,Selectors.本文主要介绍着三个部分. Channel 所有的I/O都从一个Channel开始.通道与流不同,通道是双向的,流是单向的. 即可以从通道中读取数据,也可以写数据到通道里 . 读的话,是从通道读取数据到缓冲区,写的话是从缓冲区写入数据到通道. 四种通道: FileChannel.从文件中读写数据 DatagramCha

JAVA 中BIO,NIO,AIO的理解

JAVA 中BIO,NIO,AIO的理解 博客分类: 网络编程 [转自]http://qindongliang.iteye.com/blog/2018539 在高性能的IO体系设计中,有几个名词概念常常会使我们感到迷惑不解.具体如下: 序号 问题 1 什么是同步? 2 什么是异步? 3 什么是阻塞? 4 什么是非阻塞? 5 什么是同步阻塞? 6 什么是同步非阻塞? 7 什么是异步阻塞? 8 什么是异步非阻塞? 散仙不才,在查了一部分资料后,愿试着以通俗易懂的方式解释下这几个名词.如有不足之处,还

Java中的NIO和IO的对比分析

总的来说,java中的IO和NIO主要有三点区别: IO                  NIO 面向流     面向缓冲 阻塞IO  非阻塞IO  无   选择器(Selectors) 1.面向流与面向缓冲 Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的. Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方.此外,它不能前后移动流中的数据.如果需要前后移动从流中读取的数据,需要先将它缓存到一个缓冲区. Java

Java中String的基础知识

Java中String的基础知识 ==与equal的区别 基本数据类型,指的是java中的八种基本数据结构(byte,short,char,int,long,float,double,boolean),一般的比较是使用的 ==,比较的是他们的值. 复合数据类型(类) ==比较的是两个对象的引用,可以理解为在内存中的地址,除非是同一个new出来的对象,他们的 ==为true,否则,都为false. equal是object中的方法.object中的实现如下,内部还是使用==实现,也就是说,如果一个

java中的IO基础总结

java中的I/O类库设计可谓是比较丰富的,在我们平时的编程中也经常接触到,往往大部分的系统都有对IO操作的一些封装代码,平时要用到往往翻翻api或者找个写好的方法复制就搞定,由此带来的是对java本身提供的这些方法不熟悉,平时不好好梳理下,对java的io包下面这些常用类也就比较凌乱了.所以这里通过api文档和java.io下面的源码去整理下. 1.表示字节输入输出流的所有类的超类(InputStream/OutputStream) 构造方法:InputStream() 创建一个输入的stre

Java中的IO基础学习小记之一

IO流用来处理设备间的数据传送 Java对数据的操作是通过流的方式进行的 Java用于操作流的对象都在io包中 数据按照操作数据的方式分为两种:字节流和字符流 流按照流向分为:输入流和输出流 硬盘存储的数据时间长,断电后仍然存在 内存存数的数据时间短,断电后不存在. 硬盘读写数据慢,内存读取数据快 Java中IO的输入和输出是相对于内存的 从硬盘向内存中写数据,称为输入 从内存向硬盘中写数据,称为输出 外围设备包括  打印机,硬盘,U盘等 在计算机中,所有的数据都是按照二进制的形式存储的. 用于

Java中浮点数的基础知识

偶然查看Math.round的JDK 1 public static int round(float a) { 2 if (a != 0x1.fffffep-2f) // greatest float value less than 0.5 3 return (int)floor(a + 0.5f); 4 else 5 return 0; 6 } 注释说0x1.fffffep-2f是最接近0.5的float类型的小数,咦,科学计数法用e表示指数我是知道的,但是这个p是什么鬼.可能有的读者还会问,

Java中的NIO

Java NIO非堵塞技术实际是采取Reactor模式,或者说是Observer模式为我们监察I/O端口, 如果有内容进来,会自动通知我们,这样,我们就不必开启多个线程死等,从外界看,实现了流畅的I/O读写,不堵塞了. NIO 有一个主要的类Selector,这个类似一个观察者,只要我们把需要探知的socketchannel告诉Selector,我们接着做别的事情,当有事件发生时,他会通知我们,传回一组SelectionKey,我们读取这些Key,就会获得我们刚刚注册过的socketchanne

JAVA中的NIO(二)

一.内存文件映射 内存文件映射允许我们创建和修改那些因为太大而不能放入内存中的文件.有了内存文件映射,我们就可以假定整个文件都在内存中,而且可以完全把文件当作数组来访问. package com.dy.xidian; import java.io.RandomAccessFile; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; public class LargeMappedFiles { stat