Tag: c

Java Line IO与C ++ IO?

请注意,这不是“好于”的讨论。 我是一名C ++程序员,它让我感到非常愚蠢,不知道如何做很多Java文件IO。 我需要在文件中存储许多不同的数据类型,以便稍后读回。 这些包括整数和可变长度的字符串。 在C ++中,我可以使用: //wont actually know the value of this string mystr(“randomvalue”); //the answer to the Ultimate Question of Life, the Universe, and Everything int some_integer = 42; //output stream ofstream myout(“foo.txt”); //write the values myout << mystr << endl; myout << some_integer <> read_string; myin >> read_integer; 非常感谢!

将C ++ OpenGl转换为Java(LWJGL),glBufferData();

我一直在搞乱LWJGL尝试创建一个.obj解析器,它将从blender导出的文件转换为OpenGL渲染代码。 我遵循了类似于我正在做的教程,但它是用c ++编写的,我很难理解。 我已经设法让一切都与解析器一起工作(我认为),但是当实际渲染到模型的时候,我很难创建一个与c ++代码相当的java。 本教程使用以下代码行: glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(glm::vec3), &vertices[0], GL_STATIC_DRAW); 然后(显然)它绘制数组。 我很确定我需要将Vecotor3f从我的列表(顶点)转换为FloatBuffer,而我不需要第二个参数(因为java会处理大小)。 但是,我不知道如何做到这一点,我仍然找到了解决java的方法,并且之前从未使用过这个类。

我应该从getFft中看到什么样的输出?

好吧,所以我正在创建一个Android音频可视化应用程序。 问题是,我从getFft()方法得到的东西与google所说的应该产生的东西并不相符。 我一直追溯到C ++的源代码,但我不熟悉C ++或FFT来真正了解正在发生的事情。 我会尽力包含这里所需的一切: (Java)Visualizer.getFft(byte [] fft) /** * Returns a frequency capture of currently playing audio content. The capture is a 8-bit * magnitude FFT. Note that the size of the FFT is half of the specified capture size but both * sides of the spectrum are returned yielding in a number […]

在Linux上将wstring转换为jstring

我在unix中将wstring转换为jstring时遇到问题,因为linux上的wchar_t的大小为4个字节(不像2个字节那样,因为我不能使用wchar_t转换为jchar)。 谁能帮助我呢? 谢谢,Reza

在JNI中链接dll文件

我正在学习使用JNI,我遇到了一些麻烦…… 我正在使用eclipse进行java和c ++,我正在使用makefile来编译c ++文件。 当我尝试在c ++中使用多个类时,所有问题都开始了。 错误代码: Exception in thread “main” java.lang.UnsatisfiedLinkError: C:\Users\Balinator\workspace\HelloJNI\jni\hello.dll: Can’t find dependent libraries at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary0(Unknown Source) at java.lang.ClassLoader.loadLibrary(Unknown Source) at java.lang.Runtime.loadLibrary0(Unknown Source) at java.lang.System.loadLibrary(Unknown Source) at HelloJNI.(HelloJNI.java:5) 它说“无法找到依赖库”,但hello.dll实际存在于路径“C:\ Users \ Balinator \ workspace \ HelloJNI \ jni \ hello.dll”下。 我试着修改makefile,认为有问题,但没有成功。 我对makefile-s不太满意,但我没有在代码本身中发现问题。 我定义了一个VM变量: -Djava.library.path=jni 这是来源: Java代码: HelloJNI.java: public class […]

与Garbage Collector和finalize()方法相关的问题

我正在阅读关于Java的垃圾收集和finalize()方法,并且有一些疑点引起了我的注意。 对不起,如果你认为这些疑惑真的很傻。 我正在阅读文章http://javarevisited.blogspot.com/2011/04/garbage-collection-in-java.html 。 在这里,第5点说: ‘在从内存中删除对象之前,垃圾收集线程调用该对象的finalize()方法,并提供执行任何所需清理的机会’。 那么这件事肯定会发生吗? 我的意思是在执行Garbage Collector方法之前总是会调用finalize()方法吗? 垃圾收集器如何知道它需要执行? 例如,我在服务器上部署了一个应用程序,那么GC什么时候执行? 它是周期性地执行,还是当收集了一些(比如说1MB)垃圾量并且执行了触发器或某些东西或者它只是随机的并且没有办法确定它何时执行? 由于垃圾收集没有发生,它如何降低我的应用程序的性能? 假设我的堆中有很多垃圾,但垃圾收集器没有被执行。 如果发生这种情况,那么这不是一个坏行为或JVM的缺陷吗? 我们可以说在C / C ++中手动完成的垃圾收集比在Java中更好地考虑到我们作为程序员足够聪明并且知道什么时候需要处理“不那么引用”的指针吗?

如何将Boost :: make_recursive_variant对象转换为字符串?

一直在玩Boost:make_recursive_variant,我很擅长如何从给定的Variant创建一个字符串并返回它。 我可以使用cout轻松输出,但我的目标是从java创建一个C ++版本的Arrays.deeptoString来返回一个字符串。 保持运行编译问题试图解决recursive_variant。 这是我的Arrays.deeptoString的当前代码。 typedef boost::make_recursive_variant<string, int, vector >::type ObjectE; class deepToString : public boost::static_visitor { public: string operator()(const int i) const { storedString += i; storedString += “,”; return storedString; } string operator()(std::vector const &v) const { storedString += “[“; for (std::size_t i = 0; i < v.size() – 1; i++) { storedString […]

将C ++回调转换为Java

我在C ++(Cocos2d)中有以下代码: typedef void (CCObject::*SEL_CallFunc)(); CCCallFunc * CCCallFunc::actionWithTarget(CCObject* pSelectorTarget, SEL_CallFunc selector) { CCCallFunc *pRet = new CCCallFunc(); if (pRet && pRet->initWithTarget(pSelectorTarget)) { pRet->m_pCallFunc = selector; pRet->autorelease(); return pRet; } CC_SAFE_DELETE(pRet); return NULL; } 使用swig转换为java时,我得到以下内容: public static CCCallFunc actionWithTarget(CCObject pSelectorTarget, SWIGTYPE_m_CCObject__f___void selector) { long cPtr = cocos2dxMappingJNI.CCCallFunc_actionWithTarget(CCObject.getCPtr(pSelectorTarget), pSelectorTarget, SWIGTYPE_m_CCObject__f___void.getCMemberPtr(selector)); return (cPtr == 0) ? null : […]

JNA:如何处理未知的结构?

如果我没弄错的话, JNA Structure依赖于相应Java类的公共字段来构建结构,这些字段应该扩展Structure 。 我的问题是我需要传递一个事先不知道声明的结构(让我们说它在运行时已知)。 我只有一个Object列表,C库期望它作为(对a)的结构。 我仍然可以使用Structure类,还是必须手工构建Memory对象,处理大小,对齐/打包自己? 例如: /* native code */ typedef struct mystruct { int x; float y; } mystruct; void dosomething(mystruct * s) { s->y += s->x; } 在Java中: … callFunctionWithSt(“dosomething”, new Object[]{Integer.valueOf(2),Float.valueOf(3.0)}); … void callFunctionWithSt(String funcName, Object[] structVals) { NativeLibrary nl = … Pointer arg = … // or Memory … […]

如何通过JNI设置我的Class的“Double”类型变量的值?

如果我只想将值设置为Double类型变量,我可能会像: public static native int getDoubleVar(Double dobj); JNIEXPORT jint JNICALL test_jni_Native_testGet(JNIEnv *env, jclass type, jobject dobj) { jclass DoubleClass = env->FindClass(“java/lang/Double”); jfieldID valueID = env->GetFieldID(DoubleClass, “value”, “D”); env->SetDoubleField(dobj, valueID, 2.3); return 0; } 这些代码有效。 但是,当我试图通过JNI设置一个类的“Double”变量的值时,我无法得到我想要的东西,当然,它崩溃了,这让我有点困惑。 Java代码: public class TestDouble { public Double value; public long num; public TestDouble(long num, Double value) { this.num = num; […]