java - 将字节数组转换为 float 组

标签 java delphi arrays

我目前正在将用于随机二进制文件访问的 Delphi 方法转换为 Java。 Delphi 程序使用:

TSingleArray  = Array[0..MAXSIZE] of Single
...
procedure GetLinkValues(const LinkVar: Integer;  const TimePeriod: Integer; var Value: PSingleArray);
...
BlockRead(Fout, Value^, Nlinks*SizeOf(Single));

将一个字节数组读入一个Single数组。在 Java 中是否有一种等效的方法可以在不遍历数组的情况下执行此操作?

我正在使用

List<Float> l = new ArrayList<Float>();
…
for (int i = 0 ; i < nLinks ; i++ )
l.add( resultsFile.readFloat());

但我担心速度。字节顺序不是问题。

最佳答案

您是否对代码进行了概要分析并发现它确实存在问题? 某些事情将不得不循环...您真的确定这是您代码中的瓶颈吗?

说了这么多,您应该能够使用 FloatBuffer,我怀疑它可以满足您的需求。不幸的是,Sun 的 JavaDoc 已关闭,所以我目前无法轻松链接到或检查文档。

要使用 FloatBuffer,您可能需要:

  • 创建与文件关联的 FileChannel(例如使用 FileInputStream.getChannel)
  • 创建一个字节缓冲区
  • 使用 ByteBuffer.asFloatBuffer 创建一个包装 ByteBuffer 的 FloatBuffer
  • 使用 FileChannel.read(byteBuffer) 读入 ByteBuffer
  • 从 FloatBuffer 读取

我对 java.nio 不是特别熟悉/不适应,所以我希望这一切都是正确的 - 但它可能非常繁琐。您当前的循环几乎肯定更简单,所以我强烈建议您先检查它的性能!顺便说一下,您可能想将当前的 FileInputStream 包装在 BufferedInputStream 中。

关于java - 将字节数组转换为 float 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/570338/

相关文章:

java - Play Framework flash 变量添加逗号以形成数据

java - 左右移动像素图像

java - 在 Horton Works 沙盒上运行 Modified Wordcount 程序时需要帮助。

delphi - 使用 indy/delphi 组件通过 https 发布文件

arrays - 如何将 json 数组转换为 flex 4 数组 (as3)?

java - Java 数组多项式加减法

java - 从另一个目录读取 .txt 文件

delphi - 如何正确将 Timage 位图分配给 jpg?

delphi - 如何使用带有字符串索引的属性?

c - 如何在函数中传递结构体数组并在 C 中更改其参数