Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JNI或其他工具,是否可以在Java中实现C代码的反射?_Java_C_Json_Struct_Java Native Interface - Fatal编程技术网

使用JNI或其他工具,是否可以在Java中实现C代码的反射?

使用JNI或其他工具,是否可以在Java中实现C代码的反射?,java,c,json,struct,java-native-interface,Java,C,Json,Struct,Java Native Interface,您好,谢谢您抽出时间来帮忙,非常感谢 我有许多用C编写的填充结构。我需要将它们转换为JSON,其中变量的名称是键,它的值是值。从我到目前为止的研究来看,没有最佳的方法来实现这一点,而且似乎每个结构的循环都需要硬编码才能获得JSON结果 但是,似乎使用反射(C不支持),可以在运行时访问每个对象,这样就可以使用循环生成JSON字符串 是否可以使用Java反射(使用JNI或其他工具)来解决此问题,并允许在运行时访问结构?简短回答:否 详细回答:一种语言中存在一个概念(反射;以及java类文件中运行时可

您好,谢谢您抽出时间来帮忙,非常感谢

我有许多用C编写的填充结构。我需要将它们转换为JSON,其中变量的名称是键,它的值是值。从我到目前为止的研究来看,没有最佳的方法来实现这一点,而且似乎每个结构的循环都需要硬编码才能获得JSON结果

但是,似乎使用反射(C不支持),可以在运行时访问每个对象,这样就可以使用循环生成JSON字符串

是否可以使用Java反射(使用JNI或其他工具)来解决此问题,并允许在运行时访问结构?

简短回答:否

详细回答:一种语言中存在一个概念(反射;以及java类文件中运行时可用的元数据)。。。一种语言(Java)有一个概念可以调用(或被称为)从C构建的二进制文件,这一事实并不意味着第一个概念在C端神奇地可用。你知道,在某条河上建一座桥并不能帮助你把一座建在岸边的建筑移到另一边


考虑构建某种分析C代码的解析器可能更合理;这将从源代码中获取JSON信息。

不,这是不可能的,因为编译后类型信息丢失。感谢您的回复。如果不需要这些类型呢。只是变量的名称和分配给它的值?例如:结构测试{int age;}测试测试;年龄=5岁;所需的JSON将是{“age”:“5”}变量名也丢失了,它只是机器代码。哦,我明白了。。该死的,谢谢你澄清这一点。当然,如果你知道这是一个C结构,你至少有一个C头。所以,试试游泳。您可能能够初始化结构值的Java数组,并在Java数组上使用JSON序列化程序,从而避免仅为序列化而编写循环等。(但是,不,你不能用一个还没有发明的结构来做这件事,就像你用反射一样。)谢谢你的回答。有道理。我已经开始做一个解析器,它可以找到所有的结构并存储变量名。但是,我不确定如何在不为每个结构创建循环的情况下,以最佳方式获得与这些变量中的每个变量相关联的值。有什么建议吗?@JaredSmith我想这应该是一个新问题。我很担心问这个问题,似乎这类问题会被记下来,人们会对我大喊大叫。。哈哈:/@JaredSmith,这在某种程度上是正确的。你应该在做了一些研究/编码实验后再写一个新问题。我已经研究这个问题有一段时间了。所有的解决方案都涉及到修改结构以使用bload。但是,对于结构的数量,该解决方案不是最优的。这些的源代码是多年前编写的。