pipetest.java

来自「java nio 编程一个实例子.服务端程序」· Java 代码 · 共 111 行

JAVA
111
字号
package com.ronsoft.books.nio.channels;import java.nio.ByteBuffer;import java.nio.channels.ReadableByteChannel;import java.nio.channels.WritableByteChannel;import java.nio.channels.Pipe;import java.nio.channels.Channels;import java.util.Random;/** * Test Pipe objects using a worker thread. * * Created April, 2002 * @author Ron Hitchens (ron@ronsoft.com) * @version $Id: PipeTest.java,v 1.2 2002/05/19 04:55:45 ron Exp $ */public class PipeTest{	public static void main (String [] argv)		throws Exception	{		// wrap a channel around stdout		WritableByteChannel out = Channels.newChannel (System.out);		// start worker and get read end of channel		ReadableByteChannel workerChannel = startWorker (10);		ByteBuffer buffer = ByteBuffer.allocate (100);		while (workerChannel.read (buffer) >= 0) {			buffer.flip();			out.write (buffer);			buffer.clear();		}	}	// This method could as easily return a SocketChannel or	// FileChannel instance.	private static ReadableByteChannel startWorker (int reps)		throws Exception	{		Pipe pipe = Pipe.open();		Worker worker = new Worker (pipe.sink(), reps);		worker.start();		return (pipe.source());	}	// -----------------------------------------------------------------	/**	 * A worker thread object which writes data down a channel.	 * Note: this object knows nothing about Pipe, uses only a	 * generic WritableByteChannel.	 */	private static class Worker extends Thread	{		WritableByteChannel channel;		private int reps;		Worker (WritableByteChannel channel, int reps)		{			this.channel = channel;			this.reps = reps;		}		// thread execution begins here		public void run()		{			ByteBuffer buffer = ByteBuffer.allocate (100);			try {				for (int i = 0; i < this.reps; i++) {					doSomeWork (buffer);					// channel may not take it all at once					while (channel.write (buffer) > 0) {						// empty					}				}				this.channel.close();			} catch (Exception e) {				// easy way out, this is demo code				e.printStackTrace();			}		}		private String [] products = {			"No good deed goes unpunished",			"To be, or what?",			"No matter where you go, there you are",			"Just say \"Yo\"",			"My karma ran over my dogma"		};		private Random rand = new Random();		private void doSomeWork (ByteBuffer buffer)			throws Exception		{			int product = rand.nextInt (products.length);			buffer.clear();			buffer.put (products [product].getBytes ("US-ASCII"));			buffer.put ("\r\n".getBytes ("US-ASCII"));			buffer.flip();		}	}}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?