- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个直接的 ByteBuffer,它应该保存按以下方式创建的 15 个 double 值
DoubleBuffer buff = ByteBuffer.allocateDirect(15*8).asDoubleBuffer();
我想从 native 代码访问此缓冲区,为了简单起见,只需在其中写入 1.0 到 15.0 之间的数字即可。从java端来看,方法是
native public static void write(DoubleBuffer buff, int len);
然后我的 C++ 代码是
JNIEXPORT void JNICALL Java_ByteBufferTest_write(JNIEnv *env, jclass cl, jobject buff, jint len)
{
double* arr = (double*) env->GetDirectBufferAddress(buff);
for(int i=0; i<15; i++){
arr[i] = (double) i;
}
}
在java中调用以下内容
write(buff, 15);
for(int i=0; i<15; i++){
System.out.println(buff.get(i));
}
只打印垃圾。
问题是,我是否正确分配了 DoubleBuffer?这样写会比较好
DoubleBuffer s = ByteBuffer.allocateDirect(15 * Double.SIZE/8).asDoubleBuffer();
或者还有更好的方法吗?
第二个问题是,为什么这不起作用? JNI 代码中对 double*
的强制转换是否错误?
谢谢
最佳答案
默认情况下,Java 的 XxxxBuffer 是大端字节序。如果您使用的是 Intel/AMD 或某些 ARM 处理器之一,默认情况下它将是小端字节序。
尝试使用
DoubleBuffer buff = ByteBuffer.allocateDirect(15*8)
.order(ByteOrder.nativeOrder()).asDoubleBuffer();
顺便说一句:使用nativeOrder()通常也更快。 ;)
关于java - 从 native 代码访问 DoubleBuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10929468/
我是 Java 图形方面的新手,所以稍微解释一下就会有帮助。 我在Java双缓冲上找到了这个片段,其中我不明白为什么我们要清除刚刚加载图形的暴露区域。 看起来我们加载了图形,然后我们就清理了它?但为什
创建新表单后,我通常会执行以下仪式: 将名称更改为有意义的名称; 输入标题; 更改位置属性(DefaultPosOnly 几乎不是用户所期望的); 将 ShowHint 设置为 true; 将Doub
我正在尝试对 winforms 面板元素进行双重缓冲。我使用面板来绘制形状。现在,我有一些类似的东西: class BufferPanel : Panel { public BufferPan
默认情况下,Windows 控件没有 DoubleBuffer。当我使用它时,我可以减少闪烁。为什么它在 Windows 控件中默认不使用。 在控件上使用 DoubleBuffer 时,任何人都可以说
当您启用应用程序样式并将 TListView 的 DoubleBuffered 属性设置为 True 时,它不起作用。当您更新列表项及其子项时,它会闪烁。有人有解决办法吗? 我实际上很喜欢样式,但
我有一个直接的 ByteBuffer,它应该保存按以下方式创建的 15 个 double 值 DoubleBuffer buff = ByteBuffer.allocateDirect(15*8).a
这个问题已经有答案了: How to get a byte array data into DoubleBuffer (1 个回答) 已关闭 9 年前。 doubleGeometryBuffer 是一
创建一个新的 Windows 窗体项目 将此表单的 TransparancyKey 和 BackColor 设置为“黑色” 运行 => 表单显示为透明 现在也设置Form.DoubleBuffered
Form 具有 DoubleBuffered 属性(bool,继承自 Control)。 如果将其设置为 true,是否所有控件都位于窗体上以双缓冲方式放置在绘制到屏幕上的窗体上?或者您是否需要担心自
ControlStyles.DoubleBuffer 和 ControlStyles.OptimizedDoubleBuffer 有什么区别? ControlStyles.DoubleBuffer 没
我使用的是Delphi XE3。 当我创建一个新的 VCL 项目并在其上放置一个 TToolbar 时,一切正常 - 除非我激活 Form1.DoubleBuffered。 从那时起,工具栏的绘制就被
在我的 Android 应用程序中,我在线程中有一个循环,该循环对存储在 DoubleBuffer 对象中的数据进行一些处理。令我惊讶的是,put(DoubleBuffer)似乎在分配内存! 这是我应
我有一个标准的 winforms TreeView 控件,每当我将鼠标悬停在表单上的任何其他控件上时,它都会不断闪烁。我想对 treeview 进行 doubleBuffer 以减少闪烁,但我不知道该
我有一个 TableLayoutPanel,我可以在其中使用布局内的控件进行一些拖放操作。不幸的是,控件在下降操作后闪烁。我在所有控件和许多其他东西上尝试了 DoubleBuffered=true 。
Control.DoubleBuffered 和 Control.SetStyle 与 ControlStyles.DoubleBuffer 在底层和实践中有何不同? 此外,ControlStyles
我们遇到了 DataGridViews 的性能问题,其中重绘速度非常慢,并找到了解决方案 Here创建派生类型并在控件上启用双缓冲。 (派生类型是必需的,因为 DoubleBuffered 属性是 p
我对 Delphi 2009/2010 对 Windows 中 Aero 主题玻璃功能的支持感到困惑,DoubleBuffered 到底意味着什么,以及它与 Aero 玻璃有什么关系。我发现Doubl
我创建了一个派生自 Panel 的自定义控件。我用它来显示使用 BackgroundImage 属性的图像。我重写 OnClick 方法并将 isSelected 设置为 true,然后调用 Inva
我们现在正在迁移到 Delphi XE(从 D7),当 Form.DoubleBuffer = True 时,我们在将 TButton 放置在 TImage 上时遇到问题 没有 DoubleBuffe
这是否意味着我无法在 delphi 2007 和 2009 之间共享表单? 最佳答案 DoubleBuffered 在 TWinControl 中已经有一段时间了。 Delphi 2009 的不同之处
我是一名优秀的程序员,十分优秀!