stdin, stdout und JNI-Aufrufe

Status
Nicht offen für weitere Antworten.

Rock Lobster

Bekanntes Mitglied
Servus,

habe hier gerade ein Stück Code, das die Executable des LAME-Encoders (das ist ein mp3-Encoder) aufruft, Parameter übergibt und vom "Process" dann den stdin und stdout gettet (als Input- bzw. OutputStream-Objekt).

Ich habe bisher von LAME per SWIG eine Java-Anbindung generieren lassen, sodaß ich keine Executable, sondern direkt die DLL von Java aus aufrufe. Dazu habe ich dennoch ganz einfach die main()-Methode von LAME von außen aufrufbar gemacht, und ich rufe sie mit denselben Parametern auf wie wenn ich die Executable starten würde.

Allerdings würde ich nun trotzdem auch gerne mit Streams arbeiten, LAME allerdings weiterhin als DLL und nicht als Executable einbinden. Gibt es dafür eine Möglichkeit? Für mich ist das ja nun ein JNI-Methoden-Aufruf - aber kann ich da trotzdem irgendwie den stdin und stdout umleiten, um ihn selbst zu füllen und auszulesen?

(Natürlich könnte ich direkt bestimmte LAME-Funktionen aufrufen, aber müßte mir dann die ganzen Schleifen usw. selbst bauen. Bequemer würde es eben über die Kommandozeilenparameter gehen, daher wäre das schon praktisch, da LAME die Streams eh schon unterstützt. Daher wär's mir lieber, wenn es hierfür eine Lösung gäbe)
 

Rock Lobster

Bekanntes Mitglied
Um es nochmal etwas einfacher auszudrücken: LAME unterstützt über einen bestimmten Parameter den Input bzw. Output über stdin und stdout. Ich will nun die Methode mit diesem Parameter aufrufen (das ist kein Problem), allerdings über JNI, und will dann aber Einfluß auf die Streams haben bzw. stdin und stdout auf eigene Stream-Objekte umleiten.
 

Rock Lobster

Bekanntes Mitglied
Hat hier wirklich keiner eine Idee?

Wenn ich einen Prozeß öffnen will, dann kann ich dazu ja folgendes machen:

Code:
Process p = Runtime.getRuntime().exec("blablabla");

InputStream stdin = p.getInputStream();
OutputStream stdout = p.getOutputStream();

Und ich würde jetzt halt genauso diese Streams abzapfen können, wenn ich eine DLL aufrufe. Da es jedoch gut möglich ist, daß ein Funktionsaufruf zu einer DLL nicht als eigener Prozeß gilt (zumindest vermute ich das), müßte ich evtl. sogar die internen Streams (also vom eigenen Programm) verwenden - ist das korrekt? Ich werd's nachher mal über System.in und System.out versuchen, aber ich kann mir gut vorstellen, daß es da zu Komplikationen kommen kann...

Also falls hier jemand doch Rat weiß, bitte melden... wäre schon relativ wichtig. Notfalls muß ich doch auf die Executable zugreifen, aber die Kunden hätten es halt gern über 'ne DLL...
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben