字节数组(从.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);
    }
  }
 }

字节数组(从.net服务器)到java中的字符串

1个字符表示数据被编码为小端UTF-16,并被解码为空终止(可能是单字节,也可能是UTF-8)。

确保您熟悉编码,并确保管道的两端使用相同的编码。

java string(byte[])构造函数使用默认的系统字符集;我将从研究如何从java读取UTF-16开始。或者两端都使用UTF-8。使用默认字符集从来都不是健壮的。