JNI 인터페이스를 통해 C++ 라이브러리를 사용하는 Java 응용 프로그램을 작성하고 있습니다. C++ 라이브러리는 Foo
유형의 객체를 생성합니다.이 객체는 JNI를 통해 Java에 정식으로 전달됩니다. JNI 인터페이스를 통한 출력 스트림 공유
void Foo::print(std::ostream &os)
을 가지고 있다고 가정하고 나는 자바 OutputStream out
있습니다. Java에서 Foo::print
을 호출하여 출력을 out
에 표시하려면 어떻게합니까? OutputStream
을 JNI 계층의 std::ostream
으로 강제 변환 할 수 있습니까? JNI 레이어의 버퍼에 출력을 캡처 한 다음 out
에 복사 할 수 있습니까?
Java에서 라이브러리를 다시 구현하는 것은 옵션이 아닙니다 (크기가 크고 성숙하며 성능 집약적입니다). –
아마도 Java에서 호출하려고해서는 안됩니다. 내 요점은 자신과 코드를 유지해야하는 사람들에게 많은 고통을 줄 가능성이 높다는 것입니다. –
나는 JNI 코드가 그것이 공정하지 않다는 것을 철저히 피하여야한다고 말하는 것은 까다 롭다는 것에 동의한다. JNI를위한 장소가 분명히 있습니다. 특히 언급 된 op와 같은 대규모 레거시 프로젝트 및 작업을 완료하는 데 사용해야하는 제 3 자 API가 있습니다. 이것은 매우 유효한 질문입니다. 제가 답을 찾고 있습니다. – Cliff