从Java程序向.Net程序发送字符串
我需要从Java程序向.Net程序发送一个字符串 我想从Java中获取一个字符串,并使用GZIPOutputStream对其进行压缩,然后使用.Net中的System.IO.Compression.GZipStream对其进行解压缩从Java程序向.Net程序发送字符串,java,c#,string,gzipoutputstream,Java,C#,String,Gzipoutputstream,我需要从Java程序向.Net程序发送一个字符串 我想从Java中获取一个字符串,并使用GZIPOutputStream对其进行压缩,然后使用.Net中的System.IO.Compression.GZipStream对其进行解压缩 ByteArrayOutputStream out = new ByteArrayOutputStream(); try { GZIPOutputStream gzipOutputStream = ne
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程序发送压缩字符串。这不可能吗
谢谢。我想您可能要找的是命名管道。它们是专门为进程间通信而设计的 由于我不是Java方面的专家,这里有一个关于如何完成Java部分的示例: 作者(v01ver)还链接到他描述C#/.NET部分的地方 但是,他/她在他的C#示例中没有使用线程,应该注意,
pipeServer.WaitForConnection()代码>方法阻止正在执行的线程
给出了一个关于如何将命名管道与线程一起使用的好例子(除了我将线程的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
}
C#将能够接受字节[],但首先您将如何发送它?Web API?应用到应用的消息?服务?“但是有没有一种方法可以将byte[]转换成字符串并将字符串发送到.Net?并且能够在.Net中将字符串转换回byte[]以将其解压回字符串?”您的方法是错误的:使用Java字符串,用支持良好的编码(比如UTF-8)将其序列化为byte[]
,然后将这些字节发送到C#程序,并使用同样受支持的编码对其进行反序列化。如果要将其压缩发送,请使用众所周知的压缩方式,如gzip,并执行String>byte[]>gzip=>gunzip->byte[]->String。如果您还需要找到程序之间通信的方法,我建议使用内存映射文件。