diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index 954e026..667a8df 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -2,6 +2,7 @@
+
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..68cc5d4
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 9e1585c..b7686d0 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -8,7 +8,7 @@
-
+
\ No newline at end of file
diff --git a/demo1/pom.xml b/demo1/pom.xml
index 1f54d91..ba203f0 100644
--- a/demo1/pom.xml
+++ b/demo1/pom.xml
@@ -9,8 +9,28 @@
1.0-SNAPSHOT
- 17
- 17
+ 22
+ 22
+ 1.18.32
+
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+
+
+
+ cn.hutool
+ hutool-all
+ 5.8.27
+
+
+ org.slf4j
+ slf4j-api
+ 2.0.13
+
+
\ No newline at end of file
diff --git a/demo1/src/main/java/cn/bunny/file_dir/ClientDemo.java b/demo1/src/main/java/cn/bunny/file_dir/ClientDemo.java
new file mode 100644
index 0000000..6dc3f31
--- /dev/null
+++ b/demo1/src/main/java/cn/bunny/file_dir/ClientDemo.java
@@ -0,0 +1,17 @@
+package cn.bunny.file_dir;
+
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.nio.channels.SocketChannel;
+
+@Slf4j
+public class ClientDemo {
+ public static void main(String[] args) throws IOException {
+ SocketChannel socketChannel = SocketChannel.open();
+ socketChannel.connect(new InetSocketAddress("localhost", 8080));
+ // socketChannel.write(Charset.defaultCharset().encode("hello"))
+ System.out.println("等待。。。");
+ }
+}
diff --git a/demo1/src/main/java/cn/bunny/file_dir/Server2Demo.java b/demo1/src/main/java/cn/bunny/file_dir/Server2Demo.java
new file mode 100644
index 0000000..e1b427b
--- /dev/null
+++ b/demo1/src/main/java/cn/bunny/file_dir/Server2Demo.java
@@ -0,0 +1,61 @@
+package cn.bunny.file_dir;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.nio.ByteBuffer;
+import java.nio.channels.SelectionKey;
+import java.nio.channels.Selector;
+import java.nio.channels.ServerSocketChannel;
+import java.nio.channels.SocketChannel;
+import java.util.Iterator;
+
+public class Server2Demo {
+ public static void main(String[] args) throws IOException {
+ // 创建Selector
+ Selector selector = Selector.open();
+
+ // 创建服务器
+ ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
+ serverSocketChannel.configureBlocking(false);
+ SelectionKey selectionKey = serverSocketChannel.register(selector, 0, null);
+
+ // 只关注channel
+ selectionKey.interestOps(SelectionKey.OP_ACCEPT);
+ System.out.println(STR."注册时的key:\{selectionKey}");
+
+ // 模拟监听端口
+ serverSocketChannel.bind(new InetSocketAddress(8080));
+
+ while (true) {
+ selector.select();
+ Iterator iterator = selector.selectedKeys().iterator();
+ while (iterator.hasNext()) {
+ SelectionKey key = iterator.next();
+ // 需要移出key,在事件集合中需要移出
+ iterator.remove();
+ if (key.isAcceptable()) {
+ ServerSocketChannel cancel = (ServerSocketChannel) key.channel();
+ SocketChannel accept = cancel.accept();
+ accept.configureBlocking(false);
+ SelectionKey scKey = accept.register(selector, 0, null);
+ scKey.interestOps(SelectionKey.OP_READ);
+ System.out.println(STR."accept的key\{accept}");
+ System.out.println(STR."scKey\{scKey}");
+ } else if (key.isReadable()) {
+ try {
+ SocketChannel channel = (SocketChannel) key.channel();
+ ByteBuffer buffer = ByteBuffer.allocate(16);
+ // 如果客户端断开,这里会报错
+ channel.read(buffer);
+ buffer.flip();
+ } catch (IOException exception) {
+ exception.printStackTrace();
+ // 断开后会进行删除
+ key.cancel();
+ }
+
+ }
+ }
+ }
+ }
+}
diff --git a/demo1/src/main/java/cn/bunny/file_dir/ServerDemo.java b/demo1/src/main/java/cn/bunny/file_dir/ServerDemo.java
new file mode 100644
index 0000000..6aa9b06
--- /dev/null
+++ b/demo1/src/main/java/cn/bunny/file_dir/ServerDemo.java
@@ -0,0 +1,76 @@
+package cn.bunny.file_dir;
+
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.nio.ByteBuffer;
+import java.nio.channels.SelectionKey;
+import java.nio.channels.Selector;
+import java.nio.channels.ServerSocketChannel;
+import java.nio.channels.SocketChannel;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+@Slf4j
+public class ServerDemo {
+ // 阻塞模式下只能接受一个连接
+ public static void main(String[] args) throws IOException {
+ // 创建Selector
+ Selector selector = Selector.open();
+
+ // 创建服务器
+ ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
+ serverSocketChannel.configureBlocking(false);
+ SelectionKey selectionKey = serverSocketChannel.register(selector, 0, null);
+
+ // 只关注channel时间
+ selectionKey.interestOps(SelectionKey.OP_ACCEPT);
+ System.out.println(STR."注册时的key:\{selectionKey}");
+
+ // 模拟监听端口
+ serverSocketChannel.bind(new InetSocketAddress(8080));
+
+ while (true) {
+ selector.select();
+ // 处理事件
+ Iterator iterator = selector.selectedKeys().iterator();
+ while (iterator.hasNext()) {
+ SelectionKey key = iterator.next();
+ System.out.println(STR."key的值为\{key}");
+ ServerSocketChannel channel = (ServerSocketChannel) key.channel();
+ SocketChannel accept = channel.accept();
+ System.out.println(STR."接受到的值\{accept}");
+ }
+ }
+ }
+
+ private static void m1() throws IOException {
+ // 使用 ByteBuffer
+ ByteBuffer buffer = ByteBuffer.allocate(16);
+ // 创建服务器
+ ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
+ serverSocketChannel.configureBlocking(false);
+ // 模拟监听端口
+ serverSocketChannel.bind(new InetSocketAddress(8080));
+ // 连接集合
+ ArrayList channels = new ArrayList<>();
+ while (true) {
+ SocketChannel accept = serverSocketChannel.accept();
+ if (accept != null) {
+ accept.configureBlocking(false);
+ channels.add(accept);
+ }
+ for (SocketChannel channel : channels) {
+ int read = channel.read(buffer);
+ // 当read大于0时才去读
+ if (read > 0) {
+ buffer.flip();
+ System.out.println((STR."读取到的内容:\{StandardCharsets.UTF_8.decode(buffer)}"));
+ buffer.clear();
+ }
+ }
+ }
+ }
+}
diff --git a/demo1/target/classes/cn/bunny/file_dir/ClientDemo.class b/demo1/target/classes/cn/bunny/file_dir/ClientDemo.class
new file mode 100644
index 0000000..de29d12
Binary files /dev/null and b/demo1/target/classes/cn/bunny/file_dir/ClientDemo.class differ
diff --git a/demo1/target/classes/cn/bunny/Demo01.class b/demo1/target/classes/cn/bunny/file_dir/Demo01.class
similarity index 87%
rename from demo1/target/classes/cn/bunny/Demo01.class
rename to demo1/target/classes/cn/bunny/file_dir/Demo01.class
index 89b298f..de57af0 100644
Binary files a/demo1/target/classes/cn/bunny/Demo01.class and b/demo1/target/classes/cn/bunny/file_dir/Demo01.class differ
diff --git a/demo1/target/classes/cn/bunny/Demo02.class b/demo1/target/classes/cn/bunny/file_dir/Demo02.class
similarity index 58%
rename from demo1/target/classes/cn/bunny/Demo02.class
rename to demo1/target/classes/cn/bunny/file_dir/Demo02.class
index 767b881..b3b4e46 100644
Binary files a/demo1/target/classes/cn/bunny/Demo02.class and b/demo1/target/classes/cn/bunny/file_dir/Demo02.class differ
diff --git a/demo1/target/classes/cn/bunny/Demo10$1.class b/demo1/target/classes/cn/bunny/file_dir/Demo10$1.class
similarity index 67%
rename from demo1/target/classes/cn/bunny/Demo10$1.class
rename to demo1/target/classes/cn/bunny/file_dir/Demo10$1.class
index cf91f41..d32aaaf 100644
Binary files a/demo1/target/classes/cn/bunny/Demo10$1.class and b/demo1/target/classes/cn/bunny/file_dir/Demo10$1.class differ
diff --git a/demo1/target/classes/cn/bunny/Demo10$2.class b/demo1/target/classes/cn/bunny/file_dir/Demo10$2.class
similarity index 71%
rename from demo1/target/classes/cn/bunny/Demo10$2.class
rename to demo1/target/classes/cn/bunny/file_dir/Demo10$2.class
index bc71560..418b61e 100644
Binary files a/demo1/target/classes/cn/bunny/Demo10$2.class and b/demo1/target/classes/cn/bunny/file_dir/Demo10$2.class differ
diff --git a/demo1/target/classes/cn/bunny/Demo10$3.class b/demo1/target/classes/cn/bunny/file_dir/Demo10$3.class
similarity index 80%
rename from demo1/target/classes/cn/bunny/Demo10$3.class
rename to demo1/target/classes/cn/bunny/file_dir/Demo10$3.class
index 747a2b8..696a4c6 100644
Binary files a/demo1/target/classes/cn/bunny/Demo10$3.class and b/demo1/target/classes/cn/bunny/file_dir/Demo10$3.class differ
diff --git a/demo1/target/classes/cn/bunny/Demo10.class b/demo1/target/classes/cn/bunny/file_dir/Demo10.class
similarity index 88%
rename from demo1/target/classes/cn/bunny/Demo10.class
rename to demo1/target/classes/cn/bunny/file_dir/Demo10.class
index 1b21cdf..59021bb 100644
Binary files a/demo1/target/classes/cn/bunny/Demo10.class and b/demo1/target/classes/cn/bunny/file_dir/Demo10.class differ
diff --git a/demo1/target/classes/cn/bunny/Demo3.class b/demo1/target/classes/cn/bunny/file_dir/Demo3.class
similarity index 65%
rename from demo1/target/classes/cn/bunny/Demo3.class
rename to demo1/target/classes/cn/bunny/file_dir/Demo3.class
index 617938d..dfb4991 100644
Binary files a/demo1/target/classes/cn/bunny/Demo3.class and b/demo1/target/classes/cn/bunny/file_dir/Demo3.class differ
diff --git a/demo1/target/classes/cn/bunny/Demo4.class b/demo1/target/classes/cn/bunny/file_dir/Demo4.class
similarity index 63%
rename from demo1/target/classes/cn/bunny/Demo4.class
rename to demo1/target/classes/cn/bunny/file_dir/Demo4.class
index fcb0137..a0aa132 100644
Binary files a/demo1/target/classes/cn/bunny/Demo4.class and b/demo1/target/classes/cn/bunny/file_dir/Demo4.class differ
diff --git a/demo1/target/classes/cn/bunny/Demo5.class b/demo1/target/classes/cn/bunny/file_dir/Demo5.class
similarity index 74%
rename from demo1/target/classes/cn/bunny/Demo5.class
rename to demo1/target/classes/cn/bunny/file_dir/Demo5.class
index e19a277..7e89fda 100644
Binary files a/demo1/target/classes/cn/bunny/Demo5.class and b/demo1/target/classes/cn/bunny/file_dir/Demo5.class differ
diff --git a/demo1/target/classes/cn/bunny/Demo6.class b/demo1/target/classes/cn/bunny/file_dir/Demo6.class
similarity index 73%
rename from demo1/target/classes/cn/bunny/Demo6.class
rename to demo1/target/classes/cn/bunny/file_dir/Demo6.class
index 1ca6837..fc09876 100644
Binary files a/demo1/target/classes/cn/bunny/Demo6.class and b/demo1/target/classes/cn/bunny/file_dir/Demo6.class differ
diff --git a/demo1/target/classes/cn/bunny/Demo7.class b/demo1/target/classes/cn/bunny/file_dir/Demo7.class
similarity index 75%
rename from demo1/target/classes/cn/bunny/Demo7.class
rename to demo1/target/classes/cn/bunny/file_dir/Demo7.class
index cffe49b..44fdd20 100644
Binary files a/demo1/target/classes/cn/bunny/Demo7.class and b/demo1/target/classes/cn/bunny/file_dir/Demo7.class differ
diff --git a/demo1/target/classes/cn/bunny/Demo8.class b/demo1/target/classes/cn/bunny/file_dir/Demo8.class
similarity index 71%
rename from demo1/target/classes/cn/bunny/Demo8.class
rename to demo1/target/classes/cn/bunny/file_dir/Demo8.class
index b67d174..81d4f5c 100644
Binary files a/demo1/target/classes/cn/bunny/Demo8.class and b/demo1/target/classes/cn/bunny/file_dir/Demo8.class differ
diff --git a/demo1/target/classes/cn/bunny/Demo9.class b/demo1/target/classes/cn/bunny/file_dir/Demo9.class
similarity index 81%
rename from demo1/target/classes/cn/bunny/Demo9.class
rename to demo1/target/classes/cn/bunny/file_dir/Demo9.class
index 77204d5..b00bde3 100644
Binary files a/demo1/target/classes/cn/bunny/Demo9.class and b/demo1/target/classes/cn/bunny/file_dir/Demo9.class differ
diff --git a/demo1/target/classes/cn/bunny/file_dir/Server2Demo.class b/demo1/target/classes/cn/bunny/file_dir/Server2Demo.class
new file mode 100644
index 0000000..6aa0e73
Binary files /dev/null and b/demo1/target/classes/cn/bunny/file_dir/Server2Demo.class differ
diff --git a/demo1/target/classes/cn/bunny/file_dir/ServerDemo.class b/demo1/target/classes/cn/bunny/file_dir/ServerDemo.class
new file mode 100644
index 0000000..72d5607
Binary files /dev/null and b/demo1/target/classes/cn/bunny/file_dir/ServerDemo.class differ