从Java程序向.Net程序发送字符串

时间:2016-06-23 21:32:16

标签: java c# string gzipoutputstream

我需要从Java程序向.Net程序发送一个字符串。

我想从Java获取一个字符串并使用GZIPOutputStream对其进行压缩,然后使用.Net中的System.IO.Compression.GZipStream对其进行解压缩。

    ByteArrayOutputStream out = new ByteArrayOutputStream();
        try
        {
            GZIPOutputStream gzipOutputStream = new GZIPOutputStream(out);
            gzipOutputStream.write(text.getBytes("utf-8"));
        }
        catch (IOException e)
        {
            //Something
        }

    return out.toByteArray();

目前我拥有它以便从Java程序返回一个byte []。但有没有办法将byte []转换为String并将字符串发送到.Net?并能够将字符串转回.Net中的byte []以将其解压缩回字符串?

我有什么选择?我的主要目标是将压缩字符串发送到.Net程序。压缩是不可能的?

感谢。

1 个答案:

答案 0 :(得分:0)

我认为您可能正在寻找的是命名管道。它们专为进程间通信而设计。

由于我不是Java专家,因此这里有一个关于如何完成Java部分的示例:SO

作者(v01ver)也链接到his website,在那里他描述了C#/。NET部分。

但是,他/她没有在他的C#示例中使用线程,应该注意pipeServer.WaitForConnection();方法阻塞正在执行的线程。

This MSDN page给出了一个关于如何使用带有线程的命名管道的一个很好的例子(除了我将线程的IsBackground属性设置为true以防止应用程序在主线程之后在后台运行已关闭)。

然后,您可以使用回调方法或事件来处理接收的数据。

如果您需要使用gzip压缩,可以将NamedPipeServerStream打包在GZipStream中并将其包含在StreamWriterStreamReader中,如下所示:

        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
        }