我正在开发一个同时使用.net和java的项目,使用zeromq在它们之间进行通信。
我可以连接到 .net 服务器,但是当我尝试将字节数组转换为字符串时,会发生奇怪的事情。在 Eclipse 调试器中我可以看到该字符串及其长度。当我单击字符串时,它的值更改为仅第一个字母,长度更改为 1。在 Eclipse 控制台中,当我尝试复制并粘贴输出时,我只得到第一个字母。我还尝试在 NetBeans 中运行它并遇到相同的问题。
我认为这可能是由于字节序,所以都累了 BIG_ENDIAN LITTLE_ENDIAN
有人知道我如何获取完整的字符串,而不仅仅是第一个字母吗?
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import org.zeromq.ZMQ;
class local_thr
{
private static final String ENDPOINT = "tcp://127.0.0.1:8000";
static String[] myargs={ENDPOINT, "1000", "100"};
public static void main (String [] args) {
args = myargs;
ZMQ.Context ctx = ZMQ.context (1);
ZMQ.Socket s = ctx.socket (ZMQ.SUB);
s.subscribe("".getBytes());
s.connect (ENDPOINT);
while(true){
byte [] data = s.recv (0);
ByteBuffer buf = ByteBuffer.wrap(data);
buf.order(ByteOrder.nativeOrder());
byte[] bytes = new byte[buf.remaining()];
buf.get(bytes, 0, bytes.length);
String quote;
quote = new String(bytes);
String myQuote;
myQuote = new String();
System.out.println (quote);
}
}
}
最佳答案
1 char 表明数据被编码为小端 UTF-16 并解码为 nul 终止(可能是单字节,也可能是 UTF-8)。
确保您熟悉编码,并确保管道的两端使用相同编码。
java string(byte[]) 构造函数使用默认的系统字符集;我首先研究如何从 java 读取 UTF-16。或者可以从两端使用 UTF-8。使用默认字符集永远不会可靠。
关于c# - Zeromq - bytearray(来自.net服务器)到java中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8630347/