Ich schreibe eine Java-Anwendung, die eine C++ - Bibliothek über eine JNI-Schnittstelle verwendet. Die C++ - Bibliothek erstellt Objekte vom Typ Foo
, die ordnungsgemäß über JNI an Java übergeben werden.Gemeinsame Nutzung von Ausgabeströmen über eine JNI-Schnittstelle
Angenommen, die Bibliothek eine Ausgabefunktion
void Foo::print(std::ostream &os)
hat, und ich habe eine Java OutputStream out
. Wie kann ich Foo::print
von Java aufrufen, so dass die Ausgabe auf out
erscheint? Gibt es eine Möglichkeit, die OutputStream
zu einer std::ostream
in der JNI-Schicht zu zwingen? Kann ich die Ausgabe in einem Puffer die JNI-Schicht erfassen und dann in out
kopieren?
Eine Neuimplementierung der Bibliothek in Java ist keine Option (sie ist groß, ausgereift und leistungsintensiv). –
Vielleicht sollten Sie dann nicht versuchen, es von Java aus aufzurufen. Mein Punkt ist, dass Sie wahrscheinlich eine Menge Schmerz für sich selbst und für Leute erzeugen, die Ihren Code pflegen müssen. –
Während ich zustimme, JNI-Code ist schwierig zu sagen, man sollte es vermeiden, es ist nicht fair. Es gibt definitiv einen Ort für JNI, speziell mit großen Legacy-Projekten wie den erwähnten und in meinem Fall 3rd Party APIs, die Sie verwenden müssen, um die Arbeit zu erledigen. Das ist eine sehr gültige Frage, nach der ich auch eine Antwort suche. – Cliff