Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Java将浮点缓冲区或浮点(Float)数组写入文件的最快方法_Java_File_Floating Point_Buffer_Filechannel - Fatal编程技术网

用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()