gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 08:25:03 25 4
gpt4 key购买 nike

我目前正在将用于随机二进制文件访问的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com