-1

我需要从 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[] 变成一个字符串并将字符串发送到.Net?并且能够将字符串转回 .Net 中的 byte[] 以将其解压缩回字符串?

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

谢谢。

4

1 回答 1

0

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

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

作者 (v01ver) 还链接到描述 C#/.NET 部分的网站。

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

这个 MSDN 页面提供了一个很好的示例,说明如何将命名管道与线程一起使用(除了我将IsBackground线程的属性设置为 true 以防止应用程序在主线程关闭后在后台运行)。

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

如果您需要使用 gzip 压缩,您可以将其包装NamedPipeServerStream在 a 中GZipStream,然后将其包装在 aStreamWriterStreamReader类似中:

        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
        }
于 2016-06-23T22:35:40.827 回答