字节数组(从.net服务器)到java中的字符串
本文关键字:java 字符串 服务器 数组 字节数 net 字节 | 更新日期: 2023-09-27 18:18:42
我正在做一个同时使用。net和java的项目,使用zeromq在它们之间进行通信。
我可以连接到。net服务器,但是当我试图将字节数组转换为字符串时,奇怪的事情发生了。在eclipse调试器中,我可以看到字符串及其长度。当我点击字符串时,它的值变为只有第一个字母,长度变为1。在eclipse控制台中,当我尝试复制和粘贴输出时,我只得到第一个字母。我也试着在NetBeans中运行它,得到同样的问题。
我认为这可能是由于Endianness,所以都累了BIG_ENDIANLITTLE_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个字符表示数据被编码为小端UTF-16,并被解码为空终止(可能是单字节,也可能是UTF-8)。
确保您熟悉编码,并确保管道的两端使用相同的编码。
java string(byte[])构造函数使用默认的系统字符集;我将从研究如何从java读取UTF-16开始。或者两端都使用UTF-8。使用默认字符集从来都不是健壮的。