Java-NIO(八):DatagramChannel
Java NIO中的DatagramChannel是一个能收发UDP包的通道。
操作步骤:
1)打开 DatagramChannel
2)接收/发送数据
同样它也支持NIO的非阻塞模式操作,例如:
1 @Test 2 public void send() throws IOException { 3 DatagramChannel channel = DatagramChannel.open(); 4 channel.configureBlocking(false); 5 6 ByteBuffer byteBuffer = ByteBuffer.allocate(1024); 7 8 Scanner scanner = new Scanner(System.in); 9 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 10 while (scanner.hasNext()) { 11 String line = scanner.next(); 12 byteBuffer.put((format.format(new Date()) + ":" + line).getBytes()); 13 byteBuffer.flip(); 14 15 channel.send(byteBuffer, new InetSocketAddress("127.0.0.1", 9899)); 16 byteBuffer.clear(); 17 } 18 19 channel.close(); 20 } 21 22 @Test 23 public void receive() throws IOException { 24 DatagramChannel channel = DatagramChannel.open(); 25 channel.configureBlocking(false); 26 channel.bind(new InetSocketAddress(9899)); 27 28 Selector selector = Selector.open(); 29 channel.register(selector, SelectionKey.OP_READ); 30 31 while (selector.select() > 0) { 32 Iterator<SelectionKey> selectionKeys = selector.selectedKeys().iterator(); 33 while (selectionKeys.hasNext()) { 34 SelectionKey selectionKey = selectionKeys.next(); 35 if (selectionKey.isReadable()) { 36 ByteBuffer buffer = ByteBuffer.allocate(1024); 37 channel.receive(buffer); 38 buffer.flip(); 39 System.out.println(new String(buffer.array(), 0, buffer.limit())); 40 buffer.clear(); 41 } 42 43 selectionKeys.remove(); 44 } 45 } 46 47 }
基础才是编程人员应该深入研究的问题,比如:
1)List/Set/Map内部组成原理|区别
2)mysql索引存储结构&如何调优/b-tree特点、计算复杂度及影响复杂度的因素。。。
3)JVM运行组成与原理及调优
4)Java类加载器运行原理
5)Java中GC过程原理|使用的回收算法原理
6)Redis中hash一致性实现及与hash其他区别
7)Java多线程、线程池开发、管理Lock与Synchroined区别
8)Spring IOC/AOP 原理;加载过程的。。。
【+加关注】。