C++调用Java的问题

bj-alex 2016-09-28 07:12:52
老大给指派个任务:实现C++与JAVA对象的互相调用,要求使用SWIG实现。
查了资料,但是似乎SWIG只是将C++封装成JAVA可以调用的形式。没有C++调用JAVA的方法。不知道是不是我理解有问题,还请有过这方面经验的高手指教。
...全文
651 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
bj-alex 2016-11-16
  • 打赏
  • 举报
回复
引用 17 楼 jiqiang01234 的回复:
[quote=引用 14 楼 qwangq 的回复:] [quote=引用 12 楼 jiqiang01234 的回复:] [quote=引用 10 楼 qwangq 的回复:] [quote=引用 9 楼 jiqiang01234 的回复:] [quote=引用 5 楼 qwangq 的回复:] [quote=引用 4 楼 jiqiang01234 的回复:] 你可以建议你们老大,用protobuf当做桥梁进行java和c++通讯,简单写一个jni接口足矣。要与时俱进
我查了下protobuf和xml,jason对比,如果是小数据场合,protobuf优势比较大,但是如果是大数据呢?使用文件?[/quote] 弄反了吧?protobuf是压缩的二进制流,怎么都比xml和json空间小。 所谓“大数据”是多大的数据?100M,1G还是1T?这么大的数据,难道xml和json就能传输吗?[/quote] 现在是要强调响应速度,界面JAVA,中间层有c++的东西,点击界面,需要及时响应,老大说写文件太慢了。[/quote] 你们有多少数据需要传输?需要多块的响应速速(别说越快越好这种没法衡量的话)?[/quote] 就是点击页面,数据交换完成,立刻切换页面。不能超过200ms吧,要不就显得卡顿了。[/quote] 每次提交需要多少数据?几百k?几M?几十M? 这种数量级的数据,序列化的时间根本就不是问题,还是多关注一下网络传输的速度吧[/quote] 多谢了!
jiqiang01234 2016-10-17
  • 打赏
  • 举报
回复
引用 14 楼 qwangq 的回复:
[quote=引用 12 楼 jiqiang01234 的回复:] [quote=引用 10 楼 qwangq 的回复:] [quote=引用 9 楼 jiqiang01234 的回复:] [quote=引用 5 楼 qwangq 的回复:] [quote=引用 4 楼 jiqiang01234 的回复:] 你可以建议你们老大,用protobuf当做桥梁进行java和c++通讯,简单写一个jni接口足矣。要与时俱进
我查了下protobuf和xml,jason对比,如果是小数据场合,protobuf优势比较大,但是如果是大数据呢?使用文件?[/quote] 弄反了吧?protobuf是压缩的二进制流,怎么都比xml和json空间小。 所谓“大数据”是多大的数据?100M,1G还是1T?这么大的数据,难道xml和json就能传输吗?[/quote] 现在是要强调响应速度,界面JAVA,中间层有c++的东西,点击界面,需要及时响应,老大说写文件太慢了。[/quote] 你们有多少数据需要传输?需要多块的响应速速(别说越快越好这种没法衡量的话)?[/quote] 就是点击页面,数据交换完成,立刻切换页面。不能超过200ms吧,要不就显得卡顿了。[/quote] 每次提交需要多少数据?几百k?几M?几十M? 这种数量级的数据,序列化的时间根本就不是问题,还是多关注一下网络传输的速度吧
gldcpp 2016-10-17
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如: A将请求数据写到文件a.txt,写完后改名为aa.txt B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,改名为bb.txt A发现bb.txt存在时,读取其内容,读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢? 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话,文本文件的格式问题可参考json或xml 共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的: ·进程之间松耦合 ·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。 ·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务,只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满) ·…… “跨语言、跨机,跨操作系统,跨硬件平台,跨国,跨*.*的”苦海无边, 回头是“使用共享纯文本文件进行信息交流”的岸!
这段话我要写到我的笔记本上
赵4老师 2016-10-16
  • 打赏
  • 举报
回复
zhao4zhong1说的每句话都值得后辈逐字推敲。
bj-alex 2016-10-16
  • 打赏
  • 举报
回复
引用 12 楼 jiqiang01234 的回复:
[quote=引用 10 楼 qwangq 的回复:] [quote=引用 9 楼 jiqiang01234 的回复:] [quote=引用 5 楼 qwangq 的回复:] [quote=引用 4 楼 jiqiang01234 的回复:] 你可以建议你们老大,用protobuf当做桥梁进行java和c++通讯,简单写一个jni接口足矣。要与时俱进
我查了下protobuf和xml,jason对比,如果是小数据场合,protobuf优势比较大,但是如果是大数据呢?使用文件?[/quote] 弄反了吧?protobuf是压缩的二进制流,怎么都比xml和json空间小。 所谓“大数据”是多大的数据?100M,1G还是1T?这么大的数据,难道xml和json就能传输吗?[/quote] 现在是要强调响应速度,界面JAVA,中间层有c++的东西,点击界面,需要及时响应,老大说写文件太慢了。[/quote] 你们有多少数据需要传输?需要多块的响应速速(别说越快越好这种没法衡量的话)?[/quote] 就是点击页面,数据交换完成,立刻切换页面。不能超过200ms吧,要不就显得卡顿了。
Dobzhansky 2016-10-11
  • 打赏
  • 举报
回复
JVM 寄宿
jiqiang01234 2016-10-11
  • 打赏
  • 举报
回复
引用 10 楼 qwangq 的回复:
[quote=引用 9 楼 jiqiang01234 的回复:] [quote=引用 5 楼 qwangq 的回复:] [quote=引用 4 楼 jiqiang01234 的回复:] 你可以建议你们老大,用protobuf当做桥梁进行java和c++通讯,简单写一个jni接口足矣。要与时俱进
我查了下protobuf和xml,jason对比,如果是小数据场合,protobuf优势比较大,但是如果是大数据呢?使用文件?[/quote] 弄反了吧?protobuf是压缩的二进制流,怎么都比xml和json空间小。 所谓“大数据”是多大的数据?100M,1G还是1T?这么大的数据,难道xml和json就能传输吗?[/quote] 现在是要强调响应速度,界面JAVA,中间层有c++的东西,点击界面,需要及时响应,老大说写文件太慢了。[/quote] 你们有多少数据需要传输?需要多块的响应速速(别说越快越好这种没法衡量的话)?
赵4老师 2016-10-10
  • 打赏
  • 举报
回复
无profiler不要谈效率!!尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代!
bj-alex 2016-10-10
  • 打赏
  • 举报
回复
引用 9 楼 jiqiang01234 的回复:
[quote=引用 5 楼 qwangq 的回复:] [quote=引用 4 楼 jiqiang01234 的回复:] 你可以建议你们老大,用protobuf当做桥梁进行java和c++通讯,简单写一个jni接口足矣。要与时俱进
我查了下protobuf和xml,jason对比,如果是小数据场合,protobuf优势比较大,但是如果是大数据呢?使用文件?[/quote] 弄反了吧?protobuf是压缩的二进制流,怎么都比xml和json空间小。 所谓“大数据”是多大的数据?100M,1G还是1T?这么大的数据,难道xml和json就能传输吗?[/quote] 现在是要强调响应速度,界面JAVA,中间层有c++的东西,点击界面,需要及时响应,老大说写文件太慢了。
赵4老师 2016-09-30
  • 打赏
  • 举报
回复
承认我说的好,为什么不照做呢? 难道你以为我只是说说而已吗? 用我这种做法已经实现过的相互调用的实际案例有: DOS FORTRAN←→Windows Maple Linux php←→Windows IE Flash ActionScript Win32 VB6←→VirtualBox Ubuntu C++ …… C++ ←→Java那还不是洒洒水、小菜一碟、简单得跟一一样吗?!
jiqiang01234 2016-09-30
  • 打赏
  • 举报
回复
引用 5 楼 qwangq 的回复:
[quote=引用 4 楼 jiqiang01234 的回复:] 你可以建议你们老大,用protobuf当做桥梁进行java和c++通讯,简单写一个jni接口足矣。要与时俱进
我查了下protobuf和xml,jason对比,如果是小数据场合,protobuf优势比较大,但是如果是大数据呢?使用文件?[/quote] 弄反了吧?protobuf是压缩的二进制流,怎么都比xml和json空间小。 所谓“大数据”是多大的数据?100M,1G还是1T?这么大的数据,难道xml和json就能传输吗?
bj-alex 2016-09-30
  • 打赏
  • 举报
回复
引用 7 楼 zhao4zhong1 的回复:
承认我说的好,为什么不照做呢? 难道你以为我只是说说而已吗? 用我这种做法已经实现过的相互调用的实际案例有: DOS FORTRAN←→Windows Maple Linux php←→Windows IE Flash ActionScript Win32 VB6←→VirtualBox Ubuntu C++ …… C++ ←→Java那还不是洒洒水、小菜一碟、简单得跟一一样吗?!
赵老师不要生气,我这不是还在调研嘛,结果反馈给领导,最终决策权还在领导手里。 而且,JAVA是另一个团队做的,我们老大只负责C++,这样就需要双方都做出修改。JAVA团队的东西已经提出来了,如果人家不想改,这不也是事儿嘛。
jiqiang01234 2016-09-29
  • 打赏
  • 举报
回复
你可以建议你们老大,用protobuf当做桥梁进行java和c++通讯,简单写一个jni接口足矣。要与时俱进
Qlaiaqu 2016-09-29
  • 打赏
  • 举报
回复
语言调用一般的方向是脚本语言调用c/c++,而反向c/c++调用的有lua,python。而c/c++调用脚本语言的方式,是通过语言本身提供的开发库来进行操作的,lua和python在安装包里面都带了。至于java,我好像没看到过。另外,java能做到的事情,c/c++没有做不到的。
bj-alex 2016-09-29
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如: A将请求数据写到文件a.txt,写完后改名为aa.txt B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,改名为bb.txt A发现bb.txt存在时,读取其内容,读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢? 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话,文本文件的格式问题可参考json或xml 共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的: ·进程之间松耦合 ·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。 ·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务,只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满) ·…… “跨语言、跨机,跨操作系统,跨硬件平台,跨国,跨*.*的”苦海无边, 回头是“使用共享纯文本文件进行信息交流”的岸!
赵老师说的太好了!
赵4老师 2016-09-29
  • 打赏
  • 举报
回复
不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如: A将请求数据写到文件a.txt,写完后改名为aa.txt B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,改名为bb.txt A发现bb.txt存在时,读取其内容,读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢? 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话,文本文件的格式问题可参考json或xml 共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的: ·进程之间松耦合 ·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。 ·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务,只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满) ·…… “跨语言、跨机,跨操作系统,跨硬件平台,跨国,跨*.*的”苦海无边, 回头是“使用共享纯文本文件进行信息交流”的岸!
bj-alex 2016-09-29
  • 打赏
  • 举报
回复
引用 3 楼 fengxuxing 的回复:
语言调用一般的方向是脚本语言调用c/c++,而反向c/c++调用的有lua,python。而c/c++调用脚本语言的方式,是通过语言本身提供的开发库来进行操作的,lua和python在安装包里面都带了。至于java,我好像没看到过。另外,java能做到的事情,c/c++没有做不到的。
我猜测,由于不是同一个团队,所以大家都坚持自己的东西。 java调用C++的,方法有很多,包括SWIG,但是反向的,我还在看SWIG的文档,貌似没有这方面的东西。所以,想问问,有没有做过SWIG的。
bj-alex 2016-09-29
  • 打赏
  • 举报
回复
引用 4 楼 jiqiang01234 的回复:
你可以建议你们老大,用protobuf当做桥梁进行java和c++通讯,简单写一个jni接口足矣。要与时俱进
我查了下protobuf和xml,jason对比,如果是小数据场合,protobuf优势比较大,但是如果是大数据呢?使用文件?

64,643

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧