NIO2实例
来源:互联网 发布:手机表格制作软件 编辑:程序博客网 时间:2024/06/06 02:35
/**
*
*/
package zngz.server;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.io.Reader;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.AsynchronousChannelGroup;
import java.nio.channels.AsynchronousServerSocketChannel;
import java.nio.channels.AsynchronousSocketChannel;
import java.nio.channels.CompletionHandler;
import java.nio.channels.SocketChannel;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* @author Administrator
*
*/
public class ZngzServer {
private AsynchronousServerSocketChannel ssc = null;
AcceptCompletionHandler acceptHandler = new AcceptCompletionHandler();
public ZngzServer() {
try {
init();
ssc.accept(ssc, acceptHandler);
start();
} catch (IOException e) {
e.printStackTrace();
}
}
public void init() throws IOException {
final ExecutorService executor = Executors.newCachedThreadPool();
final AsynchronousChannelGroup channelgroup = AsynchronousChannelGroup.withCachedThreadPool(executor, 8);
ssc = AsynchronousServerSocketChannel.open(channelgroup);
ssc.bind(new InetSocketAddress(9996));
}
public void start() {
final ScheduledThreadPoolExecutor scheduleds = new ScheduledThreadPoolExecutor(1);
scheduleds.scheduleAtFixedRate(new workThread(), 1000, 1000,TimeUnit.MILLISECONDS);
//workThread test = new workThread();
//Thread t1= new Thread(test);
//t1.start();
}
public static void main(String[] args) {
new ZngzServer();
}
private class AcceptCompletionHandler implements CompletionHandler<AsynchronousSocketChannel, AsynchronousServerSocketChannel> {
@Override
public void completed(final AsynchronousSocketChannel clientSocket,final AsynchronousServerSocketChannel ssc) {
if(clientSocket.isOpen()){
System.out.println("ClientSocket is Open");
}
ssc.accept(ssc, this);
ByteBuffer readbuffer = ByteBuffer.allocate(40584);
clientSocket.read(readbuffer, readbuffer,new ReaderCompletionHandler(clientSocket));
// 向socket管道中发送数据
// fileChannel.transferTo(position, count, target);
// 从socket管道中取数据
// fileChannel.transferFrom(arg0, arg1, arg2);
}
@Override
public void failed(final Throwable arg0, final AsynchronousServerSocketChannel ssc) {
if(ssc.isOpen()){
try {
ssc.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private class ReaderCompletionHandler implements CompletionHandler<Integer, ByteBuffer> {
AsynchronousSocketChannel clientSocket =null;
public ReaderCompletionHandler(
final AsynchronousSocketChannel clientSocket) {
this.clientSocket = clientSocket;
}
@Override
public void completed(final Integer result, final ByteBuffer readbuffers) {
// 如果读取完毕
if (result == -1) {
try {
clientSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// 没有读取完毕
else if (result > 0) {
readbuffers.flip();
clientSocket.write(readbuffers, readbuffers,new WriteCompletedHandler());
//readbuffers.flip();
readbuffers.clear();
clientSocket.read(readbuffers, readbuffers, this);
}
}
@Override
public void failed(final Throwable exc, final ByteBuffer readbuffer) {
readbuffer.flip();
readbuffer.clear();
}
}
private class WriteCompletedHandler implements CompletionHandler<Integer, ByteBuffer> {
@Override
public void completed(final Integer result,final ByteBuffer bytebuffers) {
System.out.println("WriteCompletedHandler......." + bytebuffers);
final File writeFile = new File("D:"+File.separator+"file"+File.separator+"zzc_write.txt");
System.out.println("WriteCompletedHandler......,write File" +writeFile.getName());
RandomAccessFile raf = null;
try {
raf = new RandomAccessFile(writeFile, "rwd");
raf.seek(raf.length());
bytebuffers.flip();
raf.write(bytebuffers.array(), bytebuffers.position(),bytebuffers.remaining());
System.out.println("write Buffer="+bytebuffers.array().toString());
//AsynchronousFileChannel fileChannel = AsynchronousFileChannel.open(Paths.get(writeFile.getPath()), StandardOpenOption.READ,StandardOpenOption.WRITE,StandardOpenOption.CREATE);
//fileChannel.write(bytebuffer, bytebuffer.position());
} catch (Exception ex) {
ex.printStackTrace();
}
}
@Override
public void failed(final Throwable arg0,final ByteBuffer bytebuffer) {
if (null != bytebuffer) {
bytebuffer.flip();
bytebuffer.clear();
}
}
}
class workThread implements Runnable {
SocketChannel clientChannel = null;
public workThread() {
try {
clientChannel = SocketChannel.open();
clientChannel.connect(new InetSocketAddress(9996));
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
System.out.println("Thread Start.......");
try {
final File file = new File("D:/file/zzc.txt");
System.out.println("AcceptCompletionHandler...."+ file.getName());
final Reader r = new BufferedReader(new FileReader(file));
int temp = 0;
String str = "";
while ((temp = r.read()) != -1) {
str += (char) temp;
}
System.out.println("File readSource =" + str);
final ByteBuffer readbuffer = ByteBuffer.wrap(str.getBytes());
readbuffer.flip();
clientChannel.write(readbuffer);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Thread Stop ........");
}
}
}
- NIO2实例
- NIO2实例
- nio2
- nio2
- 说说nio2
- Java7 NIO2
- java nio2
- Java NIO2
- NIO2.0
- Java NIO2
- Java NIO2介绍
- Java7 NIO2 Path类
- IO-NIO-NIO2
- Java NIO2:NIO概述
- Java7 nio2 异步Socket实践
- Java学习笔记--NIO2文件系统
- JDK7新特性<四> NIO2.0 文件系统
- Java NIO2 AIO开辟核心流程
- PHP生成GUID
- Java.lang.Object类中应用在多线程的几种方法介绍
- 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclips
- linux下C编程笔记
- 如何制作Jar包并在android中调用jar包
- NIO2实例
- 详解SAP如何新建和COPY CLIENT以及常见问题解析
- 如何在Win2003中搭建视频服务器
- 专注高端网站芯片+逐浪软件新标识发布
- ScheduledThreadPoolExecutor应用
- Perl计算CRC
- Syabse的服务器端默认字符集修改方法
- Oracle数据库全文索引设置步骤简介(中文词法分析器)
- 判断 已知点是否在 各点所组成的轨迹内