Самый быстрый способ записи массива FloatBuffer или Float (float) в файл на Java - PullRequest
1 голос
/ 05 июля 2011

У меня есть куча данных с плавающей точкой в ​​FloatBuffer, которые нужно записать в файл (без трёх минут).В настоящее время DataOutputStream используется для записи элемента FloatBuffer элемент в файл.Это медленно.Предпочтительно, я бы хотел использовать FileChannel, но я столкнулся с трудностью, поскольку кажется, что FloatBuffer не может быть преобразован в ByteBuffer, а байты - это то, что нужно FileChannel для записи данных.,

Вместо использования FoatBuffers в качестве источника данных я мог бы легко использовать массив.Но я не могу легко использовать массив ByteBuffer / вместо этого.

Любое понимание этой проблемы будет высоко ценится.Спасибо.

1 Ответ

3 голосов
/ 05 июля 2011

Вместо запуска с с FloatBuffer, вы можете создать ByteBuffer для записи в FileChannel, затем использовать ByteBuffer.asFloatBuffer, записать в FloatBuffer, как в настоящее время делаете это, а затем запишите ByteBuffer, который будет содержать соответствующую информацию?

Лично я всегда находил java.nio довольно запутанным, но кажется, что это должно работать ...

РЕДАКТИРОВАТЬ: Другой пользователь попробовал это, и обнаружил, что это не работает:

Однако asFloatBuffer() не будет работать, потому что hasArray() будет ложным. Короче, следующее не работает (ни allocate, ни allocateDirect не будет работать):

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

У меня нет времени сейчас исследовать альтернативы, к сожалению.

...