gpt4 book ai didi

java - 从 C/C++ 在内存中写入一个缓冲区,并在没有 JNI 的情况下在 java 中从中读取

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:56:40 26 4
gpt4 key购买 nike

我有一个问题,这是否可能以及如何实现?从使用 Java 从 C/C++ 创建的内存缓冲区中读取字节?我的想法是使用 JNI 在 C++ 中启动一个循环,将字节写入缓冲区,只将缓冲区的方向发送给 Java,然后 Java 在另一个循环中从中读取字节。目标是减少 JNI 函数的调用,因为我注意到它们会降低性能。我想知道我必须在 Java 中使用哪些类以及在 C++ 中使用哪些函数。

非常感谢您

最佳答案

您可以使用 ByteBuffer。最简单的方法是使用 ByteBuffer.allocateDirect() 使用 Java 分配的地址。如果你必须使用 C 提供的地址,你可以更改地址和限制(大小)以指向你喜欢的任何地方。

如果您想使用更底层的东西,在 Oracle JVM 上您可以使用 Unsafe.getXxxx(long address)Unsafe.setXxxx(long address, T value) 方法,但必须小心使用这些方法,因为不正确的使用会导致 JVM 崩溃。 (就像在 C 中使用无效指针一样)这些方法由 ByteBuffer 使用,并转化为经过优化的单个机器代码指令。

关于java - 从 C/C++ 在内存中写入一个缓冲区,并在没有 JNI 的情况下在 java 中从中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7891210/

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