用Java将浮点缓冲区或浮点(Float)数组写入文件的最快方法
我在一个用Java将浮点缓冲区或浮点(Float)数组写入文件的最快方法,java,file,floating-point,buffer,filechannel,Java,File,Floating Point,Buffer,Filechannel,我在一个FloatBuffer中有一堆浮点数据,需要写入一个文件(不需要三分钟)。目前,DataOutputStream用于将FloatBuffer元素逐个写入文件。这太慢了。我最好使用FileChannel,但我遇到了一个障碍,因为FloatBuffer似乎无法转换为ByteBuffer,而FileChannel需要字节来写入数据 我可以轻松地使用数组,而不是使用FoatBuffers作为数据源。但是我不能简单地使用ByteBuffer/数组 如果能深入了解这个问题,我们将不胜感激。谢谢。您是
FloatBuffer
中有一堆浮点数据,需要写入一个文件(不需要三分钟)。目前,DataOutputStream
用于将FloatBuffer
元素逐个写入文件。这太慢了。我最好使用FileChannel
,但我遇到了一个障碍,因为FloatBuffer
似乎无法转换为ByteBuffer
,而FileChannel
需要字节来写入数据
我可以轻松地使用数组,而不是使用FoatBuffers
作为数据源。但是我不能简单地使用ByteBuffer/数组
如果能深入了解这个问题,我们将不胜感激。谢谢。您是否可以创建一个字节缓冲区来用于写入文件通道
,然后使用字节缓冲区。作为浮动缓冲区
,无论当前如何写入该浮点缓冲区
,然后写出包含相关信息的ByteBuffer
就我个人而言,我总是觉得java.nio相当令人困惑,但这感觉好像它应该可以工作
编辑:另一个用户尝试了此操作,但发现它不起作用:
但是,asFloatBuffer()
将不起作用,因为hasArray()
将为false。简而言之,以下操作不起作用(无论是allocate
,还是allocateDirect
都不起作用):
不幸的是,我现在没有时间调查替代方案。好的,我忘了ByteBuffer有一个putFloat函数。这真的很有效。使用FileChannel要快得多。谢谢。@user756670:它有putFloat,但这是一个单次操作。使用asFloatBuffer
可以进行批量放入,这可能更好。我有一个外部库返回FloatBuffer对象,所以我不能从ByteBuffer开始。我该怎么办?@AlexPetrenko:看,我的FloatBuffer上没有这样的方法。没有返回ByteBuffer的方法,我选择了)我使用Android。
ByteBuffer.allocate(amount * 4).asFloatBuffer().asArray()