我读过ByteBuffer(java.nio)比Buffer类更高效,因此在读取数据时应该使用它。我的问题是关于一个从多播地址读取数据包并将其转换为基本对象的UDP客户端。什么是从DatagramSocket解析这些数据包的最有效/最快的方法?目前,我有一个数据报包,我在其中包装了一个ByteBuffer字节数组,并从那里读取。我的目标是尽量减少新对象的创建,最大化速度。
我读过ByteBuffer(java.nio)比Buffer类更高效,因此在读取数据时应该使用它。我的问题是关于一个从多播地址读取数据包并将其转换为基本对象的UDP客户端。什么是从DatagramSocket解析这些数据包的最有效/最快的方法?目前,我有一个数据报包,我在其中包装了一个ByteBuffer字节数组,并从那里读取。我的目标是尽量减少新对象的创建,最大化速度。
DatagramSocket
无法直接读取ByteBuffer
,但是您可以使用DatagramChannel
来实现此功能。
DatagramPacket
构造函数都采用 byte[]
,而不是 ByteBuffer
。您只能获取缓冲区的支持数组(backing array)(如果有的话),而 直接字节缓冲区 不会有支持数组。 - finnw我认为ByteBuffer的使用仅仅是因为Buffer在程序员的角度下没有足够的功能来使访问高效,而不是出于效率考虑。我怀疑效率上是否有差异,因为底层代码大部分都是重复的。
需要注意的是,无论哪种方式比使用简单的字节数组更有效并不总是清楚的 - NIO性能很容易被误估。