NIO2实例
来源:互联网 发布:天津企业seo 编辑:程序博客网 时间:2024/05/16 17:54
/**
*
*/
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开辟核心流程
- 好吧~分析比较一下当前互联网JavaWeb不敌php等其他平台的原因~当然先收集信息 2
- android 实时监听网络连接状态
- JDBC简易步骤
- windows系统:oracle 10g的下载、安装、配置 (提供绝版安装文件下载)
- JSP+Servlet+JDBC实现数据分页
- NIO2实例
- 【栈与队列】SDUT练习2—数据结构实验之栈一:进制转换
- XML(DOM/SAXParser)
- 一款保护眼睛,定时休息提醒的小工具
- Xcode4中code sign identity选项值不出下拉选择框的解决方法
- 基于Java的一些权限框架简介
- 9Patch再次研究
- 苹果开发者授权账号申请流程和网上教程不同
- 超链接隐藏ip