2011-07-05 54 views
1

我在FloatBuffer中有一堆需要写入文件的浮点数据(不需要三分钟)。目前使用DataOutputStreamFloatBuffer逐个元素写入文件。这很慢。最好是我想使用一个FileChannel,但我遇到了一个障碍,因为看起来FloatBuffer不能转换为ByteBuffer,字节是FileChannel为了写入数据所需要的。用Java编写FloatBuffer或Float(float)数组的最快方法

而不是使用FoatBuffers作为我的数据源,我可以很容易地使用一个数组。但我不能轻易使用ByteBuffer /数组。

任何有关这个问题的见解将不胜感激。谢谢。

回答

3

而是开始关闭FloatBuffer的,你可以创建一个ByteBuffer用于写入FileChannel,然后用ByteBuffer.asFloatBuffer,编写成FloatBuffer但你正在做它,然后写出来的ByteBuffer哪些将包含相关信息?

我个人一直认为是java.nio相当混乱,但这种感觉就像它可能应该工作...

编辑:另一个用户想这一点,并发现它不工作:

但是,asFloatBuffer()将不起作用,因为hasArray()将为false。总之,下面不工作(既不allocate,也不allocateDirect将工作):

ByteBuffer.allocate(amount * 4).asFloatBuffer().asArray() 

我没有马上进行调查的替代品的时候,很遗憾。

+0

好吧,我忘了ByteBuffer有一个putFloat函数。这工作得很好。使用FileChannel速度非常快。谢谢。 – user8709

+0

@ user756670:它已经putFloat,但这是一次性操作。使用'asFloatBuffer'可以让你做批量投入,这可能更好。 –

+0

我有一个返回FloatBuffer对象的外部库,所以我无法从ByteBuffer开始。我该怎么办? –