zeromq - bytearray (с сервера .net) в строку в java - PullRequest
1 голос
/ 25 декабря 2011

Я работаю над проектом, который использует .net и java, используя zeromq для связи между ними.

Я могу подключиться к серверу .net, однако, когда я пытаюсь преобразовать байтовый массив в строку, происходят странные вещи. В отладчике затмения я вижу строку и ее длину. Когда я нажимаю на строку, ее значение меняется на первую букву, а длина меняется на 1. В консоли eclipse, когда я пытаюсь скопировать и вставить вывод, я получаю только первую букву. Я также попытался запустить его в NetBeans и получить ту же проблему.

Я думал, что это может быть из-за Endianness, поэтому устали оба 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 Ответ

2 голосов
/ 25 декабря 2011

1 символ предполагает, что данные кодируются как UTF-16 с прямым порядком байтов и декодируются как нуль-оканчивающиеся (могут ожидать однобайтовый код, могут ожидать UTF-8).знакомы с кодировками и убедитесь, что оба конца канала используют одинаковую кодировку .

Конструктор строки Java (byte []) использует системную кодировку по умолчанию;Я бы начал с изучения того, как читать UTF-16 из Java.Или, может быть, использовать UTF-8 с обоих концов.Использование кодировки по умолчанию никогда не бывает надежным.

...