java – 将InputStream通过JNA传递给C代码作为文件指针
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 将InputStream通过JNA传递给C代码作为文件指针,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1229字,纯文字阅读大概需要2分钟。
内容图文
![java – 将InputStream通过JNA传递给C代码作为文件指针](/upload/InfoBanner/zyjiaocheng/782/4c1afa0a8e1042389e998fba7b4d5849.jpg)
我有一个用C编写的DLL(我无法编辑),它有一些看起来像的函数原型
#include <stdio.h>
void foo(FILE *bar);
我想创建一个DLL的JNA接口,我不清楚我需要为FILE * bar参数传递什么.我假设我需要传递一个InputStream(这是我的偏好),但JNA文献似乎在这个主题上很少.
Java界面会是什么样子?我真正需要传递给foo的是什么?
编辑:foo假设bar是fopen的结果,并调用fscanf之类的操作.
编辑2:最终,我在Java中有一个字符串,我需要在C中读取,就像它是一个文件一样(这可能是一个完全不同的问题).理想情况下,我想避免编写文件,这就是为什么将InputStream转换为C文件指针是如此理想(显然非常困难).
解决方法:
我不相信你可以这样做 – 你没有简单的方法来访问InputStream实例的内部,甚至FileInputStream很可能不会在stdio FILE *之上实现.要了解您的Java界面应该是什么样的,您需要发布更多关于foo函数的信息 – 它的作用以及如何使用它.
如果您不关心FILE *实际执行的操作,可以使用JNA编写代码来调用fopen,传入文件名和打开模式,并将结果作为不透明值传递给foo,例如: (伪):
path = "MyFile.txt";
bar = Libc.fopen(path, "r");
Libfoo.foo(bar);
更新:如果您需要一个包含您需要处理的数据的字符串,就好像它在文件中一样,我认为您运气不好.不幸的是,标准C库并不是建立在流抽象之上,这意味着你不可能实现你想要的东西,除非你可以打开看起来像文件名但会导致你的字符串数据;然而,咬住子弹并将字符串保存到临时文件会更容易,然后用fopen打开它:-(
内容总结
以上是互联网集市为您收集整理的java – 将InputStream通过JNA传递给C代码作为文件指针全部内容,希望文章能够帮你解决java – 将InputStream通过JNA传递给C代码作为文件指针所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。