ByteBuffer
提供asFloatBuffer()
功能。但是,没有等效的FloatBuffer.asByteBuffer()
我正在尝试做:
float[] array = ...
try( ByteChannel channel = Files.newByteChannel( path, WRITE, CREATE, TRUNCATE_EXISTING ) ) {
channel.write (FloatBuffer.wrap (array) .asByteBuffer());
}
有没有一种有效的方式来做到这一点,或者我必须诉诸于分配a,ByteBuffer
如:
ByteBuffer buffer = ByteBuffer.allocate( array.length * 4 );
buffer .asFloatBuffer() .put (array);
channel.write (buffer);
对于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;
/**
*
* @author Aleksandr Dubinsky
*/
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());
}
}
问题内容: 我正在开发一些应用程序,它允许从SD卡中选择图像,将其保存到数据库中并为ImageView设置此值。我需要知道将uri转换为字符串并将字符串转换为uri的方法。现在,我使用了Uri的getEncodedPath()方法,但是例如,此代码不起作用: 因此,我不知道如何将Uri保存到数据库中并根据保存的值创建新的Uri。请帮我修复它。 问题答案: 我需要知道将uri转换为字符串并将字符串转
我正在努力将图像标记转换为链接并复制标记内的参数,即。 进入 我的问题不仅仅是复制src和alt数据,还包括丢失和额外的标记。 进入 和 进入 这需要对整个字符串中img标记的所有实例执行。 不是说听起来像是一个挑战,但是有人能提出一个可能的解决方案吗,我相信这可以用preg_replace但是我就是做不到? 非常感谢。
最近,我浏览了一些网站,将中缀转换成前缀符号,最后我被卷了起来。 我已经给出了我所做的步骤。。 例:-(1(2*3))(5*6)(7/8) 方法1:-(无需任何算法的手动转换):- 方法2:- 根据现场情况http://scanftree.com/Data_Structure/infix-to-prefix 所以,在这里我完全被绞死了。 请任何人提供以下方面的信息:- 关于我在以上2种方法中哪里出
问题内容: 如何从float转换为string或从string转换为float? 在我的情况下,我需要在2个值字符串(我从表中获得的值)和我计算出的浮点值之间进行断言。 我尝试从浮动到字符串: 但是断言失败 问题答案: 使用Java的类。 为了进行比较,将字符串转换为float并比较两个float总是更好。这是因为对于一个浮点数,存在多个字符串表示形式,与字符串相比,它们是不同的(例如“ 25”!
我们正在获取具有以下字段的订单数据(仅显示相关字段) 具有NULLoriginal_orderid的订单可以被认为是父订单 其中一些父母订单可能有子订单,子订单的original_orderid映射到父母的订单。 子顺序可以产生另一个子顺序,如图像所示,带有颜色编码。 与原始文本相同的数据: 作为转换,我们需要将所有子节点映射到它们的原始父节点(original_orderid为NULL),并获得
问题内容: 有没有一种简单的方法可以避免处理文本编码问题? 问题答案: 您确实无法避免处理文本编码问题,但是Apache Commons中已有一些解决方案: 至: 至: 您只需要选择所需的编码即可。