我需要从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程序。压缩是不可能的?
感谢。
答案 0 :(得分:0)
我认为您可能正在寻找的是命名管道。它们专为进程间通信而设计。
由于我不是Java专家,因此这里有一个关于如何完成Java部分的示例:SO
作者(v01ver)也链接到his website,在那里他描述了C#/。NET部分。
但是,他/她没有在他的C#示例中使用线程,应该注意pipeServer.WaitForConnection();
方法阻塞正在执行的线程。
This MSDN page给出了一个关于如何使用带有线程的命名管道的一个很好的例子(除了我将线程的IsBackground
属性设置为true以防止应用程序在主线程之后在后台运行已关闭)。
然后,您可以使用回调方法或事件来处理接收的数据。
如果您需要使用gzip压缩,可以将NamedPipeServerStream
打包在GZipStream
中并将其包含在StreamWriter
或StreamReader
中,如下所示:
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
}