c# - Zeromq - bytearray(来自.net服务器)到java中的字符串

标签 c# java zeromq

我正在开发一个同时使用.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/

相关文章:

c# - 使用 Json.net 将非数组 JSON 对象解析为数组

c# - 如何通过泛型初始化一个数组?

java - 从 axis-1.3.jar 升级到 axis-1.4-osgi.jar 时出现 ClassNotFoundException

java - 具有多个 Activity 和 fragment 的 Android Manifest 已严重损坏!我该如何修复它们?

zeromq - REQ/REP & DEALER/ROUTER 用于双向异步工作处理

java - Jeromq/ZeroMQ 服务器 (windows) - 客户端 (android) 测试

python - 通过 LAN 发送较大数据 block 时 ZMQ 失败

c# - MonoTouch 中自定义 TabBarController 中的 ViewDidLoad 中的公共(public)属性始终为 null

c# - 优化泛型方法逻辑

java - 拒绝连接到 Swordfish 服务注册表