2016-06-23 2 views
-1

Ich muss eine Zeichenfolge an ein .Net-Programm von einem Java-Programm senden.Senden einer Zeichenfolge an ein .NET-Programm von einem Java-Programm

Ich möchte eine Zeichenkette von Java nehmen und es mit GZIPOutputStream komprimieren und es mit System.IO.Compression.GZipStream von .Net dekomprimieren.

Derzeit habe ich es so, dass es ein Byte [] aus dem Java-Programm zurückgibt. Aber gibt es eine Möglichkeit, byte [] zu einem String zu machen und den String an .Net zu senden? und in der Lage sein, die Zeichenfolge zurück zu Byte [] in .NET zu konvertieren, um es zurück in eine Zeichenfolge zu dekomprimieren?

Was sind meine Optionen hier? Mein Hauptziel ist es, eine komprimierte Zeichenfolge an .Net-Programm zu senden. Ist das nicht möglich mit komprimierten?

Danke.

+1

C# die byte [] zu akzeptieren, wäre in der Lage, aber an erster Stelle, wie würdest du es schicken? Web-API? App-zu-App-Nachrichten? Bedienung ? – MoustafaS

+1

* "Aber gibt es eine Möglichkeit, byte [] zu einem String zu machen und den String an .Net zu schicken? Und den String in Byte [] in .Net zurückdrehen zu können, um ihn zurück in einen String zu dekomprimieren?" habe es falsch herum: Nimm eine Java-Zeichenkette, serialisiere sie zu 'byte []' in einer gut unterstützten Kodierung (zB UTF-8), sende diese Bytes an das C# -Programm und lasse sie mit derselben Quelle deserialisieren -codierte Codierung Wenn Sie es komprimiert senden möchten, verwenden Sie eine bekannte Komprimierung wie gzip und machen Sie String> byte []> gzip => gunzip -> byte [] -> String. –

+0

Wenn Sie noch eine Möglichkeit finden müssen, zwischen Programmen zu kommunizieren, würde ich Speicherkarten empfehlen. [Java] (http://howtodoinjava.com/java-7/nio/java-nio-2-0-memory-maped-files-mappedbytebuffer-tutorial/) [C#] (http: //www.c-sharpcorner .com/UploadFile/b942f9/using-speicherkarten-dateien /). – Measuring

Antwort

0

Ich denke, was Sie suchen, sind Named Pipes. Sie sind speziell für die Kommunikation zwischen Prozessen konzipiert.

Da ich bin kein Experte in Java ist hier ein Beispiel, wie der Java-Teil getan wird: SO

Der Autor (v01ver) auch Links zu his website wo er beschreibt den C#/NET Teil..

Allerdings verwendet er/sie keine Threads in seinem C# -Beispiel und es sollte beachtet werden, dass die pipeServer.WaitForConnection();-Methode den ausführenden Thread blockiert.

This MSDN page gibt ein gutes Beispiel für die Verwendung von Named Pipes mit Threads (außer dass ich die Eigenschaft IsBackground des Threads auf true festlegen würde, um zu verhindern, dass die Anwendung im Hintergrund ausgeführt wird, nachdem der Hauptthread geschlossen wurde).

Dann könnten Sie eine Rückrufmethode oder Ereignisse verwenden, um die empfangenen Daten zu verarbeiten.

Wenn Sie erforderlich gzip-Kompression nutzen Sie die NamedPipeServerStream in einem GZipStream wickeln können und wickeln, dass in einem StreamWriter oder StreamReader etwa so:

 using (var pipeServer = new NamedPipeServerStream("pipename", PipeDirection.InOut)) 
     using (var gZipDecompressor = new GZipStream(pipeServer, CompressionMode.Decompress)) 
     using (var gZipCompressor = new GZipStream(pipeServer, CompressionMode.Compress)) 
     using (var reader = new StreamReader(gZipDecompressor)) 
     using (var writer = new StreamWriter(gZipCompressor)) 
     { 
      // Use the writer and reader to write and receive strings 
     }