资讯专栏INFORMATION COLUMN

Java NIO Java NIO DatagramChannel

Kerr1Gan / 1246人阅读

摘要:因为是无连接的网络协议,所以不能像其它通道那样读取和写入。它发送和接收的是数据包。也不会通知你发出的数据包是否已收到,因为在数据传送方面没有任何保证。而是锁住,让其只能从特定地址收发数据。只是在数据传送方面没有任何保证。

Java NIO中的DatagramChannel是一个能收发UDP包的通道。因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入。它发送和接收的是数据包。

打开 DatagramChannel
下面是 DatagramChannel 的打开方式:

DatagramChannel channel = DatagramChannel.open();
channel.socket().bind(new InetSocketAddress(9999));

这个例子打开的 DatagramChannel可以在UDP端口9999上接收数据包。

接收数据
通过receive()方法从DatagramChannel接收数据,如:

ByteBuffer buf = ByteBuffer.allocate(48);
buf.clear();
channel.receive(buf);

receive()方法会将接收到的数据包内容复制到指定的Buffer. 如果Buffer容不下收到的数据,多出的数据将被丢弃。

发送数据
通过send()方法从DatagramChannel发送数据,如:

String newData = "New String to write to file..." + System.currentTimeMillis();

ByteBuffer buf = ByteBuffer.allocate(48);
buf.clear();
buf.put(newData.getBytes());
buf.flip();
int bytesSent = channel.send(buf, new InetSocketAddress("jenkov.com", 80));

这个例子发送一串字符到”jenkov.com”服务器的UDP端口80。 因为服务端并没有监控这个端口,所以什么也不会发生。也不会通知你发出的数据包是否已收到,因为UDP在数据传送方面没有任何保证。

连接到特定的地址
可以将DatagramChannel“连接”到网络中的特定地址的。由于UDP是无连接的,连接到特定地址并不会像TCP通道那样创建一个真正的连接。而是锁住DatagramChannel ,让其只能从特定地址收发数据。

这里有个例子:
channel.connect(new InetSocketAddress("jenkov.com", 80));
当连接后,也可以使用read()和write()方法,就像在用传统的通道一样。只是在数据传送方面没有任何保证。这里有几个例子:

int bytesRead = channel.read(buf);
int bytesWritten = channel.write(but);

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71731.html

相关文章

  • Java NIO 之 Channel(通道)

    摘要:通道可以异步读写。使用的方法读取数据创建一个读数据缓冲区对象从通道中读取数据使用的方法写入数据创建一个写数据缓冲区对象写入数据关闭完成使用后,您必须关闭它。五提供了一种被称为的新功能,也称为本地矢量。功能是通道提供的并不是。 历史回顾: Java NIO 概览 Java NIO 之 Buffer(缓冲区) 其他高赞文章: 面试中关于Redis的问题看这篇就够了 一文轻松搞懂redis集...

    piglei 评论0 收藏0
  • Java NIO 的前生今世 之二 NIO Channel 小结

    摘要:通常来说所有的的操作都是从开始的一个类似于一个和对比我们可以在同一个中执行读和写操作然而同一个仅仅支持读或写可以异步地读写而是阻塞的同步读写总是从中读取数据或将数据写入到中类型有文件操作操作操作操作使用在服务器端这些通道涵盖了和网络以及文件 Java NIO Channel 通常来说, 所有的 NIO 的 I/O 操作都是从 Channel 开始的. 一个 channel 类似于一个 ...

    JasonZhang 评论0 收藏0
  • 动力节点JavaNIO教程,轻松攻破Java NIO技术壁垒

    摘要:学习和掌握技术已经不是一个攻城狮的加分技能,而是一个必备技能。是双向的,不仅可以读取数据还能保存数据,程序不能直接读写通道,只与缓冲区交互为了让大家不被高并发与大量连接处理问题所困扰,动力节点推出了高效处理模型应用教程。 大家肯定了解Java IO, 但是对于NIO一般是陌生的,而现在使用到NIO的场景越来越多,很多技术框...

    ralap 评论0 收藏0
  • Java NIO 系列教程

    摘要:异步可以让你异步的使用,例如当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情。当数据被写入到缓冲区时,线程可以继续处理它。因此,单个的线程可以监听多个数据通道。下面是系列文章的目录概述通道之间的数据传输与原文译者郭蕾校对方腾飞 Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的...

    fanux 评论0 收藏0
  • Java NIO

    摘要:一旦声明不能改变。后数据不能进行读写位置,表示缓冲区中正在操作数据的位置。标记,表示记录当前的位置。缓冲区的限制不能为负,并且不能大于其容量。一通道用于源节点与目标节点的连接。 1.Java NIO 简介 2.Java NIO 与IO 的主要区别 3.缓冲区(Buffer)和通道(Channel) 4.文件通道(FileChannel) 5.NIO 的非阻塞式网络通信 选择器(Sel...

    superw 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<