- 浏览: 981099 次
文章分类
- 全部博客 (428)
- Hadoop (2)
- HBase (1)
- ELK (1)
- ActiveMQ (13)
- Kafka (5)
- Redis (14)
- Dubbo (1)
- Memcached (5)
- Netty (56)
- Mina (34)
- NIO (51)
- JUC (53)
- Spring (13)
- Mybatis (17)
- MySQL (21)
- JDBC (12)
- C3P0 (5)
- Tomcat (13)
- SLF4J-log4j (9)
- P6Spy (4)
- Quartz (12)
- Zabbix (7)
- JAVA (9)
- Linux (15)
- HTML (9)
- Lucene (0)
- JS (2)
- WebService (1)
- Maven (4)
- Oracle&MSSQL (14)
- iText (11)
- Development Tools (8)
- UTILS (4)
- LIFE (8)
最新评论
-
Donald_Draper:
Donald_Draper 写道刘落落cici 写道能给我发一 ...
DatagramChannelImpl 解析三(多播) -
Donald_Draper:
刘落落cici 写道能给我发一份这个类的源码吗Datagram ...
DatagramChannelImpl 解析三(多播) -
lyfyouyun:
请问楼主,执行消息发送的时候,报错:Transport sch ...
ActiveMQ连接工厂、连接详解 -
ezlhq:
关于 PollArrayWrapper 状态含义猜测:参考 S ...
WindowsSelectorImpl解析一(FdMap,PollArrayWrapper) -
flyfeifei66:
打算使用xmemcache作为memcache的客户端,由于x ...
Memcached分布式客户端(Xmemcached)
PipeImpl解析:http://donald-draper.iteye.com/blog/2373628
前面看了SocketServerChannel,SocketChannel和DatagramChannel,从今天开始我们来看管道,先从一个实例开始:
//主程序(管道)
//Sink通道
//Source通道
启动主程序管道,控制台输出:
=========The sink is start!===========
send message to source is done...
=========The source is start!===========
message come from sink:Hello source!
前面看了SocketServerChannel,SocketChannel和DatagramChannel,从今天开始我们来看管道,先从一个实例开始:
//主程序(管道)
package nio.pipe; import java.io.IOException; import java.nio.channels.Pipe; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * PipeDemo * @author donald * 2017年4月13日 * 上午9:27:12 */ public class PipeDemo { public static void main(String[] args) { // 创建一个管道 Pipe pipe = null; try { pipe = Pipe.open(); } catch (IOException e) { e.printStackTrace(); } ExecutorService exec = Executors.newFixedThreadPool(2); exec.submit(new PipeSink(pipe.sink())); exec.submit(new PipeSource(pipe.source())); } }
//Sink通道
package nio.pipe; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.Pipe; /** * SinkChannel * @author donald * 2017年4月13日 * 上午9:26:49 */ public class PipeSink implements Runnable { private Pipe.SinkChannel sinkChannel; public PipeSink(Pipe.SinkChannel sinkChannel) { this.sinkChannel = sinkChannel; } /** * */ @Override public void run() { System.out.println("=========The sink is start!==========="); try { sinkChannel.write(ByteBuffer.wrap(new String("Hello source!").getBytes("UTF-8"))); System.out.println("send message to source is done..."); } catch (IOException e) { e.printStackTrace(); } } }
//Source通道
package nio.pipe; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.Pipe; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.util.Iterator; /** * SourceChannel * @author donald * 2017年4月13日 * 上午8:56:17 */ public class PipeSource implements Runnable { private Selector selector; private Pipe.SourceChannel sourceChannel; public PipeSource(Pipe.SourceChannel sourceChannel) { this.sourceChannel = sourceChannel; try { init(); } catch (IOException e) { e.printStackTrace(); } } private void init() throws IOException{ sourceChannel.configureBlocking(false); this.selector = Selector.open(); sourceChannel.register(selector, SelectionKey.OP_READ); } @SuppressWarnings("rawtypes") @Override public void run() { System.out.println("=========The source is start!==========="); try{ while(true){ selector.select(); Iterator ite = this.selector.selectedKeys().iterator(); while(ite.hasNext()){ SelectionKey key = (SelectionKey)ite.next(); ite.remove(); if (key.isReadable()) read(key); } } }catch (IOException e) { e.printStackTrace(); } } /** * * @param key * @throws IOException */ private void read(SelectionKey key) throws IOException{ Pipe.SourceChannel channel = (Pipe.SourceChannel) key.channel(); ByteBuffer buf = ByteBuffer.allocate(100); channel.read(buf); byte[] data = buf.array(); String msg = new String(data,"UTF-8").trim(); System.out.println("message come from sink:"+msg); } }
启动主程序管道,控制台输出:
=========The sink is start!===========
send message to source is done...
=========The source is start!===========
message come from sink:Hello source!
发表评论
-
文件通道解析二(文件锁,关闭通道)
2017-05-16 23:17 1067文件通道解析一(读写操作,通道数据传输等):http://do ... -
文件通道解析一(读写操作,通道数据传输等)
2017-05-16 10:04 1164Reference定义(PhantomRefere ... -
文件通道创建方式综述
2017-05-15 17:39 1067Reference定义(PhantomReference,Cl ... -
文件读写方式简单综述后续(文件,流构造)
2017-05-14 23:04 1481Java Socket通信实例:http://donald-d ... -
文件读写方式简单综述
2017-05-14 11:13 1136Java Socket通信实例:http://donald-d ... -
FileChanne定义
2017-05-12 23:28 938文件读写方式简单综述:http://donald-draper ... -
SeekableByteChannel接口定义
2017-05-11 08:43 1235ByteChannel,分散聚集通道接口的定义(SocketC ... -
FileChannel示例
2017-05-11 08:37 992前面我们看过socket通道,datagram通道,以管道Pi ... -
PipeImpl解析
2017-05-11 08:41 933ServerSocketChannel定义:http://do ... -
Pipe定义
2017-05-10 09:07 906Channel接口定义:http://donald-drape ... -
DatagramChannelImpl 解析四(地址绑定,关闭通道等)
2017-05-10 08:27 779DatagramChannelImpl 解析一(初始化):ht ... -
DatagramChannelImpl 解析三(多播)
2017-05-10 08:20 1901DatagramChannelImpl 解析一(初始化):ht ... -
NIO-UDP实例
2017-05-09 12:32 1586DatagramChannelImpl 解析一(初始化):ht ... -
DatagramChannelImpl 解析二(报文发送与接收)
2017-05-09 09:03 1406DatagramChannelImpl 解析一(初始化):ht ... -
DatagramChannelImpl 解析一(初始化)
2017-05-08 21:52 1411Channel接口定义:http://donald-drape ... -
MembershipKeyImpl 简介
2017-05-08 09:11 924MembershipKey定义:http://donald-d ... -
DatagramChannel定义
2017-05-07 23:13 1228Channel接口定义:http://donald-drape ... -
MulticastChanne接口定义
2017-05-07 13:45 1136NetworkChannel接口定义:ht ... -
MembershipKey定义
2017-05-06 16:20 918package java.nio.channels; i ... -
SocketChannelImpl 解析四(关闭通道等)
2017-05-05 08:38 2533SocketChannelImpl 解析一(通道连接,发送数据 ...
相关推荐
Java NIO-Pipe-介绍和代码示例 - **主要内容**:介绍Pipe(管道)的概念及其使用方法,并提供示例代码。 - **学习目标**:学会使用Pipe进行线程间通信。 #### 28. Java NIO-FileLock-介绍和使用方法 - **主要内容*...
这些示例通常会包含简单的读写文件、服务器端与客户端的通信以及多路复用的使用,帮助初学者快速理解NIO的工作原理和实际应用。在学习过程中,你可以逐步深入,从基础的Buffer操作到复杂的Selector机制,掌握Java ...
本项目"nio-demo"是针对NIO编程的一个演示,通过一系列示例代码,帮助我们理解和实践NIO的基本用法。** 1. **文件读写与文件拷贝:** 在NIO中,`java.nio`包提供了`FileChannel`类,它允许我们高效地在文件之间...
- **Pipe.SinkChannel** 和 **Pipe.SourceChannel**: 提供进程间的单向数据流。 ### 3. NIO操作流程 1. **创建通道**: 根据需求创建FileChannel、SocketChannel或ServerSocketChannel等。 2. **创建缓冲区**: ...
这个名为"nioSamples"的压缩包文件很可能包含了以上概念的Java代码示例,你可以通过学习和运行这些示例,更深入地理解Java NIO的工作原理和使用方法。对于Java初学者来说,这是一个极好的实践资源,可以帮助你快速...
Java NIO(New IO)是Java 1.4版本引入的一种新的I/O API,它提供了非阻塞的I/O操作,极大地提高了I/O操作的效率。...此外,NIO还有Buffer、Pipe、FileChannel等重要概念,它们共同构建了Java NIO的强大功能。
这个"NioServer"示例可能包括以下步骤: - 创建ServerSocketChannel并绑定到指定的端口。 - 注册ServerSocketChannel到选择器,监听新的连接请求(ACCEPT事件)。 - 在主循环中,使用Selector.select()方法检查已...
- **管道 (Pipes)**:讨论了 Pipe Channel 的应用场景及其优势。 - **Channels 工具类**:介绍了 Java NIO 提供的一些工具类,用于简化 Channel 的使用。 #### 3. Selector(选择器) - **Selector 基础**:介绍了...
8. 实战案例:提供实际的NIO和Socket编程示例,帮助读者将理论知识应用于实践。 通过阅读《NIO与Socket编程技术指南》,读者不仅可以理解NIO和Socket的基本原理,还能学习到如何在实际项目中有效地利用这些技术,...
在给定的"nio.rar_Different_NIO_java nio package"压缩包中,可能包含14个不同的NIO使用示例,涵盖了上述知识点的不同方面。这些例子可以帮助开发者深入理解NIO的工作原理,掌握如何在实际项目中应用NIO技术,提高...
Java NIO,全称为Non-Blocking ..."NIO修正版書面例子"这个压缩包文件很可能是包含了一些示例代码,可以帮助你更深入地理解和实践Java NIO的各种特性。通过结合这些示例和Java API文档,你将能够更好地掌握NIO的使用。
总结,这个“JAVA NIO 异步通信模板服务端”示例是学习和理解Java NIO机制的好起点,它展示了如何利用NIO的非阻塞特性构建高并发的服务。在实际开发中,结合Android环境,可以进一步优化网络通信和数据交换的效率。
- **实例应用**:提供了一个面向对象的文件搜索工具示例。 #### 七、字符集(Character Sets) - **基础知识**:介绍了字符集的基本概念及其在 Java 中的应用。 - **字符集类**:讲解了 `Charset` 类及其相关方法,...
- **Pipe**:用于创建单向数据流。 2.4. **实例讲解** - 基于NIO的服务器端编程,通常会创建ServerSocketChannel监听客户端连接,然后使用Selector监控多个客户端连接,从而实现高效的并发处理。 在学习IO和NIO...
5. **Pipe和Scattering/Gathering I/O**:Pipe用于在应用程序内部创建数据管道,Scattering/Gathering I/O允许数据从多个Buffer分散写入或从一个Channel聚集读取,提高数据处理效率。 通过对mldn nio ppt源码的学习...
在"nioSamples"这个压缩包中,可能包含了各种NIO场景的示例代码,可以作为学习和调试NIO的参考。 通过学习和实践这些源码,我们可以了解如何创建和管理通道,如何使用缓冲区读写数据,如何注册和使用选择器,以及...
### Java NIO 的精彩细节解析 #### 一、Selector的Wakeup原理 ##### 1.1 背景介绍 在Java NIO (Non-blocking I/O)中,`Selector` 是核心组件之一,用于监控多个`Channel`上的I/O事件(如可读、可写等)。`...
6. **管道(Pipe)**:在NIO中,Pipe提供了一种进程间通信的方式,允许数据在一个线程写入,另一个线程读取。 7. **字符集**:在处理文本时,必须考虑字符编码。Java支持多种字符集,如ASCII、UTF-8和GBK等。 8. *...
4. **管道(Pipe)**:管道用于在两个线程间单向传输数据,主要用于线程间的通信。 在Java NIO中,服务器端的工作流程通常如下: 1. 创建一个服务器通道,如`ServerSocketChannel`,监听特定端口。 2. 注册选择器...
在Java中,我们使用`java.nio.Pipe`来创建管道,并通过`java.nio.channels.Pipe.SinkChannel`和`java.nio.channels.Pipe.SourceChannel`进行读写操作。以下是一个简单的Java示例: ```java import java.io....