`

NIO(六)—— NIO中的几个基础概念之一:Channel

    博客分类:
  • NIO
 
阅读更多

在NIO中有几个比较关键的概念:Channel,Buffer,Selector。

 

1. Channel(通道)

         顾名思义,就是通向什么的道路,为某个提供了渠道。

         在传统IO中,我们要读取一个文件中的内容,通常是像下面这样读取的:  

package com.mycom.test.nio;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class TestIO {	
	public static void main(String[] args) {
		try {
			File file = new File("d:/data.txt");
			InputStream inputStream = new FileInputStream(file);
			byte[] bytes = new byte[1024];
			inputStream.read(bytes);
			inputStream.close();
			System.out.println(new String(bytes));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
 这里的InputStream实际上就是为读取文件提供一个的通道。  

         但是,在传统IO中,Stream是单向的,比如InputStream只能进行读取操作,OutputStream只能进行写操作。而NIO中Channel是双向的,既可用来进行读操作,又可用来进行写操作

以下是常用的几种通道: 

  • FileChannel:可以从文件读或者向文件写入数据;
  • SocketChanel:以TCP来向网络连接的两端读写数据;
  • ServerSocketChannel:能够监听客户端发起的TCP连接,并为每个TCP连接创建一个新的Socket Channel来进行数据读写;
  • DatagramChannel:以UDP协议来向网络连接的两端读写数据。

下面给出通过FileChannel来向文件中写入数据的一个例子: 

package com.mycom.test.nio;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

/**
 * FileChannel读取文件
 * 
 * @author guweiqiang
 */
public class TestFileChannel {

	public static void main(String[] args) {
		try {
			File file = new File("d:/writeData.txt");
			FileOutputStream outputStream = new FileOutputStream(file);
			FileChannel fileChannel = outputStream.getChannel();
			ByteBuffer buffer = ByteBuffer.allocate(1024);
			String ss = "hello world!";
			buffer.put(ss.getBytes());
			buffer.flip(); //此处必须要调用buffer的flip方法
			fileChannel.write(buffer);
			fileChannel.close();
			outputStream.close();
		} catch (IOException e) {
			e.printStackTrace();
		}		
	}
}

通过上面的程序会向工程目录下的data.txt文件写入字符串"java nio",注意在调用channel的write方法之前必须调用buffer的flip方法,否则无法正确写入内容(flip方法的作用是首先读取数据到Buffer,然后反转Buffer,接着再从Buffer中读取数据)。

 

 

 

 

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

相关推荐

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

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

    JavaNIO chm帮助文档

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

    Java NIO学习笔记——ByteBuffer用法

    NULL 博文链接:https://zheng12tian.iteye.com/blog/1094811

    java NIO 视频教程

    Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。 Java NIO: Channels and Buffers(通道和缓冲区) 标准的IO基于字节流和字符流进行操作的,...

    大数据学习之旅——NIO源码

    对应文章https://blog.csdn.net/qq_39188039/article/details/86216204

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

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

    java nio中文版

    java NIO是 java New IO 的简称...– Channel :一个新的原始 I/O 抽象。 – 支持锁和内存映射文件的文件访问接口。 – 提供多路 (non-bloking) 非阻塞式的高伸缩性网络 I/O 。 本文档将围绕这几个特性进行学习和介绍。

    Java NIO——Selector机制解析三(源码分析)

    NULL 博文链接:https://goon.iteye.com/blog/1775421

    Java NIO核心概念总结篇

    这是学习Java NIO过程中总结的核心概念,里面包含了基本的知识点,详细知识点也可以查看我的博客:pcwl_java里的Java NIO篇

    xnio-nio-3.8.0.Final-API文档-中文版.zip

    Maven坐标:org.jboss.xnio:xnio-nio:3.8.0.Final; 标签:jboss、xnio、nio、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的...

    java网络编程NIO视频教程

    05-Java NIO-Channel-FileChannel详解(一).mp4 06-Java NIO-Channel-FileChannel详解(二).mp4 07-Java NIO-Channel-Socket通道-概述.mp4 08-Java NIO-Channel-ServerSocketChannel.mp4 09-Java NIO-Channel-...

    尚硅谷Java视频_NIO 视频教程

    尚硅谷_NIO_通道(Channel)的原理与获取 ·05. 尚硅谷_NIO_通道的数据传输与内存映射文件 ·06. 尚硅谷_NIO_分散读取与聚集写入 ·07. 尚硅谷_NIO_字符集 Charset ·08. 尚硅谷_NIO_阻塞与非阻塞 ·09. 尚硅谷_NIO_...

    java nio教程pdf

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

    nio入门 IBM教材,pdf格式

    几乎每一个代码示例都是一个大的 Java 程序的一部分,您可以在 参考资料 中找到这个 Java 程序。在做这些练习时,我们推荐您在自己的系统上下载、编译和运行这些程序。在您学习了本教程以后,这些代码将为您的 NIO ...

    xnio-nio-3.8.4.Final-API文档-中文版.zip

    Maven坐标:org.jboss.xnio:xnio-nio:3.8.4.Final; 标签:jboss、xnio、nio、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的...

    Java NIO中文教程

    Java NIO(New IO)是 Java IO API 的替代方案(从 Java 1.4 开始), 它替代标准的 Java IO 和 Java 网络 API。 Java NIO 提供了与标准 IO 不同的 IO 工作方式。 英文原版由知名的Jenkov编写而成。原文链接:...

    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 概述

    Java NIO系列教程(一) Java NIO 概述

    JAVA NIO 按行读取大文件,支持 GB级别

    本类,是专门为了处理大文件... 如果 到达 fbb的结尾 还没有结束,就再通过nio读取一段字节,继续处理。 由于对于本程序 116个字节以上的行才有意义,所以 在next实现方法中,有对 116 长度的判断,否则返回 null

Global site tag (gtag.js) - Google Analytics