栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将FloatBuffer转换为ByteBuffer

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将FloatBuffer转换为ByteBuffer

对于

HeapFloatBuffer
,即由
FloatBuffer.allocate
或创建
FloatBuffer.wrap
,没有简单的解决方案。需要编写一个扩展ByteBuffer的自定义类。

对于HotSpot 8中的直接缓冲区,这在普通情况下将起作用:

FloatBuffer floatBuffer = ByteBuffer.allocateDirect (...).asFloatBuffer();ByteBuffer byteBuffer = (ByteBuffer) ((sun.nio.ch.DirectBuffer)floatBuffer).attachment();

对于其他情况,请使用以下内容。请注意,此类在package中声明

java.nio
。这也可能仅适用于HotSpot 8。

package java.nio;public class BufferUtils {      public static ByteBuffer    asByteBuffer (FloatBuffer floatBuffer) { if (floatBuffer instanceof DirectFloatBufferU) {     DirectFloatBufferU buffer = (DirectFloatBufferU) floatBuffer;     return (ByteBuffer) new DirectByteBuffer (buffer.address(), floatBuffer.capacity() * Float.BYTES, buffer).position (floatBuffer.position() * Float.BYTES).limit (floatBuffer.limit() * Float.BYTES); } else if (floatBuffer instanceof DirectFloatBufferS) {     DirectFloatBufferS buffer = (DirectFloatBufferS) floatBuffer;     return (ByteBuffer) new DirectByteBuffer (buffer.address(), floatBuffer.capacity() * Float.BYTES, buffer).position (floatBuffer.position() * Float.BYTES).limit (floatBuffer.limit() * Float.BYTES); } else if (floatBuffer instanceof ByteBufferAsFloatBufferB) {     ByteBufferAsFloatBufferB buffer = (ByteBufferAsFloatBufferB)floatBuffer;     return (ByteBuffer) ((ByteBuffer) buffer.bb .duplicate() .position (buffer.offset) .limit (buffer.offset + buffer.capacity() * Float.BYTES)) .slice() .position (buffer.position() * Float.SIZE) .limit (buffer.limit() * Float.BYTES); } else if (floatBuffer instanceof ByteBufferAsFloatBufferL) {     ByteBufferAsFloatBufferL buffer = (ByteBufferAsFloatBufferL)floatBuffer;     return (ByteBuffer) ((ByteBuffer) buffer.bb .duplicate() .position (buffer.offset) .limit (buffer.offset + buffer.capacity() * Float.BYTES)) .slice() .position (buffer.position() * Float.SIZE) .limit (buffer.limit() * Float.BYTES); } else     throw new IllegalArgumentException ("Unsupported implementing class " + floatBuffer.getClass().getName());        }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/419503.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号