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

java NIO 之 Channel

 
阅读更多

java NIO 之 Channel

 

 

java NIO和流类似,但还是有所区别

 

  • 既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的
  • 通道可以异步地读写
  • 通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入

从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示:



 

 

Channel的实现

 

  • FileChannel:从文件中读写数据。
  • DatagramChannel:能通过UDP读写网络中的数据。
  • SocketChannel:能通过TCP读写网络中的数据。
  • ServerSocketChannel:可以监听新进来的TCP连接,像Web服务器那样。对每一个新进来的连接都会创建一个SocketChannel。

代码例子

package com.xx.nio;

import java.io.File;
import java.io.FileInputStream;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;

public class ChannelTest {
	public static void main(String[] args) throws Exception {
		String path = ChannelTest.class.getResource("/").getPath();
		FileInputStream fis = new FileInputStream(new File(path + "nio-test.txt"));
		FileChannel channel = fis.getChannel();
		/*
		 * Java.nio.charset.Charset处理了字符转换问题。
		 * 它通过构造CharsetEncoder和CharsetDecoder将字符序列转换成字节和逆转换。
		 */
		Charset charset = Charset.forName("UTF-8");
		CharsetDecoder decoder = charset.newDecoder();
		ByteBuffer buffer = ByteBuffer.allocate(128);
		CharBuffer charBuffer = CharBuffer.allocate(128);
		int i = channel.read(buffer);
		while(i != -1){
			buffer.flip(); // 切换到读模式
			decoder.decode(buffer, charBuffer, false);
			charBuffer.flip(); // 切换到读模式
			// 判断缓冲区中还有没有内容
			while(charBuffer.hasRemaining()){
				char c = charBuffer.get();
				System.out.print(c);
			}
			charBuffer.clear();
			buffer.clear();
			i = channel.read(buffer);
		}
		
		channel.close();
		fis.close();
	}
}

 

  • 大小: 9 KB
分享到:
评论

相关推荐

    JavaNIO chm帮助文档

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

    Java NIO实战开发多人聊天室

    05-Java NIO-Channel-FileChannel详解(一).mp4 06-Java NIO-Channel-FileChannel详解(二).mp4 08-Java NIO-Channel-ServerSocketChannel.mp4 09-Java NIO-Channel-SocketChannel.mp4 10-Java NIO-Channel-...

    java网络编程NIO视频教程

    03-Java NIO-Channel-概述.mp4 04-Java NIO-Channel-FileChannel(介绍和示例).mp4 05-Java NIO-Channel-FileChannel详解(一).mp4 06-Java NIO-Channel-FileChannel详解(二).mp4 07-Java NIO-Channel-Socket通道-概述...

    详解java NIO之Channel(通道)

    主要介绍了详解java NIO之Channel(通道)的相关资料,文中讲解非常详细,示例代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下

    java NIO 视频教程

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

    java nio中文版

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

    Java-NIO之Channel(通道).doc

    Java-NIO之Channel(通道).doc

    java nio教程pdf

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

    Java NIO系列教程

    Java NIO系列教程 Java NIO Channel Buffer Selector SocketChannel

    Java NIO原理和使用

    Java NIO非堵塞应用通常适用用在I/O读写等方面,我们知道,系统运行的性能瓶颈通常在I/O读写,包括对端口和文件的操作上,过去,在打开一个I/O通道后,read()将一直等待在端口一边读取字节内容,如果没有内容进来,...

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

    not introduced with the other NIO types in Java 1.4 because they depend on the variable arguments capability that was introduced in Java 5.) NIO is missing several features, which were subsequently ...

    <<java nio>> javaNIO的使用

    javaNIO的使用,讲述了新IO,Buffer ,channel的核心概念

    Java+NIO+中文版.pdf

    java nio作者倾力所写的简单易懂的NIO学习指南,让你顺利拿下NIO开发,包括了NIO中的Buffer,Channel,Selector的介绍,理论&代码都有,是你学习NIO的不二法宝~

    浅谈java中nio的使用方式

    NIO其核心概念包括Channel,Selector,SelectionKey,Buffer.

    Java IO, NIO and NIO.2(Apress,2015)

    Java I/O, NIO, and NIO.2 is a power-packed book that accelerates your mastery of Java's various I/O APIs. In this book, you'll learn about classic I/O APIs (File, RandomAccessFile, the stream classes ...

    Java NIO 网络编程初探

    Java NIO 网络编程初探 1. Java NIO Java 1.4 版本添加了一个新的IO API,称为NIO(New IO)。...Java IO 的操作都是基于输入输出流的,而NIO则是基于Channel和Buffer的,数据先被读取到Buffer中,然后再进

    Java NIO 聊天室 JSwing

    import java.nio.channels.SocketChannel; import java.util.Iterator; import com.nio.user.ClientUser; import com.nio.user.ClientUserManager; import com.nio.user.UserData; public class NIOClient { ...

    JAVA-NIO之Socket/ServerSocket Channel(详解)

    下面小编就为大家带来一篇JAVA-NIO之Socket/ServerSocket Channel(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    详解java nio中的select和channel

    主要介绍了java nio中的select和channel

    javasnmp源码-nio-learn:JavaNIO使用示例,NIO的使用,TCP,UDP的简单示例

    Buffer是数据的容器,在nio中负责数据的存取,java为不同数据类型提供了相对应的缓冲区类型 如:ByteBuffer、CharBuffer、ShortBuffer、IntBuffer、LongBuffer、FloatBuffer 、DoubleBuffer 等。 Buffer的基本使用 ...

Global site tag (gtag.js) - Google Analytics