基于文件夹复制的NIO实例
public void fileCopy(File file, File newFile) {
File[] files = file.listFiles();
File newFilePath = new File(newFile.getAbsolutePath() + file.getAbsolutePath().split(":")[1]);
if (file.isDirectory()) {
newFilePath.mkdir();
for (File file1 : files) {
fileCopy(file1, newFile);
}
} else {
FileInputStream fileInputStream = null;
FileOutputStream fileOutputStream = null;
try {
fileInputStream = new FileInputStream(file);
FileChannel fisc = fileInputStream.getChannel();
fileOutputStream = new FileOutputStream(newFilePath);
FileChannel fosc = fileOutputStream.getChannel();
ByteBuffer buffer=ByteBuffer.allocate(2048);
while (true){
int read = fisc.read(buffer);
if(read==-1){
break;
}
buffer.flip();
fosc.write(buffer);
buffer.clear();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
基于套接字的NIO实例
public void NIOServer() throws IOException {
Selector selector = Selector.open();
ServerSocketChannel ssc = ServerSocketChannel.open();
ssc.configureBlocking(false);
ssc.register(selector, SelectionKey.OP_ACCEPT);
ServerSocket serverSocket = ssc.socket();
InetSocketAddress inetSocketAddress = new InetSocketAddress("127.0.0.1", 8899);
serverSocket.bind(inetSocketAddress);
while (true) {
selector.select();
Set<SelectionKey> selectionKeys = selector.selectedKeys();
Iterator<SelectionKey> iterator = selectionKeys.iterator();
while (iterator.hasNext()) {
SelectionKey next = iterator.next();
if (next.isAcceptable()) {
ServerSocketChannel channel = (ServerSocketChannel) next.channel();
SocketChannel accept = channel.accept();
accept.configureBlocking(false);
accept.register(selector, SelectionKey.OP_READ);
} else if (next.isReadable()) {
SocketChannel channel = (SocketChannel) next.channel();
System.out.println(getData(channel));
channel.close();
}
iterator.remove();
}
}
}
public void NIOCilent() throws IOException {
Socket socket = new Socket("127.0.0.1", 8899);
OutputStream outputStream = socket.getOutputStream();
outputStream.write("hello".getBytes());
outputStream.close();
}
private static String getData(SocketChannel channel) throws IOException {
ByteBuffer buffer = ByteBuffer.allocate(1024);
StringBuilder stringBuilder = new StringBuilder();
while (true) {
buffer.clear();
int n = channel.read(buffer);
if (n == -1) {
break;
}
buffer.flip();
int limit = buffer.limit();
char[] dst = new char[limit];
for (int i = 0; i < limit; i++) {
dst[i] = (char) buffer.get(i);
}
stringBuilder.append(dst);
buffer.clear();
}
return stringBuilder.toString();
}