gpt4 book ai didi

java - 在 Java 中读取 C++ 二进制文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:02:00 24 4
gpt4 key购买 nike

我有一个 500MB 的二进制文件。有一堆 float 条目。它是由 C++ 程序编写的。我会像这样用 C++ 加载它。

void load(char f_name[], int size, float data[])
{
std::fstream f_bin(f_name, std::ios::in|std::ios::binary);

f_bin.seekg(std::ios::beg);
f_bin.read((char*)data, size*sizeof(float));
f_bin.close();
}

float *data;
int size = 123456789;
data = new float[size];
load("myFile.bin", size, data);

我可以访问浮点值:data[x];在 C++ 中,它工作得非常快。 Java 中有类似的东西吗?

编辑阅读了一下之后我到目前为止有这个:

        RandomAccessFile f = new RandomAccessFile("C://path//myFile.bin", "r");
byte[] bytes = new byte[(int)f.length()];
f.read(bytes);

float fl = ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN).getFloat();


System.out.println(fl);

打印第一个 float 项。现在我应该逐个 float 地循环 float 并将其放入类似 float[] data 的数组中。

最佳答案

您可以在 Java 中执行此操作。

try(FileChannel fc = new RandomAccessFile("myFile.bin", "rw").getChannel()) {
FloatBuffer fb = fc.map(MapMode.READ_WRITE, 0, fc.size())
.order(ByteOrder.nativeOrder()).asFloatBuffer();
// use fb
}

这要快得多,因为它内存映射文件并避免内存复制(您可以在 C++ 中执行相同操作)

关于java - 在 Java 中读取 C++ 二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27571156/

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