Я не верю, что вы можете сделать это - у вас нет простого способа получить доступ к внутренним объектам экземпляра InputStream
, и даже FileInputStream
, скорее всего, не будет реализован поверх stdio FILE *. Чтобы увидеть, каким должен быть ваш Java-интерфейс, вам нужно больше узнать о функции foo
- что она делает и как вы ее используете.
Если вас не волнует, что на самом деле делает FILE *
, вы можете кодировать с помощью JNA для вызова fopen
, передавая имя файла и режим открытия, и передавая результат в виде непрозрачного значения через foo
, например (Псевдокод):
path = "MyFile.txt";
bar = Libc.fopen(path, "r");
Libfoo.foo(bar);
Обновление: Если вам нужна строка, содержащая данные, которые вы должны обработать, как если бы они были в файле, я думаю, вам не повезло. К сожалению, стандартная библиотека C не построена поверх потоковой абстракции, что означает, что вы вряд ли сможете достичь того, чего хотите, если не сможете открыть то, что выглядит как имя файла, но приводит к вашим строковым данным; тем не менее, будет намного, намного проще укусить пулю и сохранить строку во временный файл, а затем открыть его с помощью fopen
: - (