0

如何在java中实现一个无符号字节,限制是大小只能是1个字节,即我们不能通过And'ing与0xFF转换为short或int

我必须通过套接字传输一个无符号字节数组,因为接收端是一个 C 代码方法,只需要一个大小为 1 字节的无符号字节数组,但是由于 Java 不支持无符号字节的概念,所以会出现问题。我们有什么方法可以做到这一点。

字节 b=(字节)0xF0;甚至字节 b1=0x00; 未通过套接字通道正确发送。请参阅写入服务器的方法。

公共无效编码(IoSession 会话,对象消息,ProtocolEncoderOutput 输出)抛出异常 {

    //lProxylogger.info("Inside ProtocolEncoderAdapter. Encoding response to client..");
    String response ;

    //lProxylogger.info("The response length in encode adapter is "+ response.length()+" Message="+response);
    byte[] responseStream; 

    response=(String) message;

    responseStream= response.getBytes("windows-1252");

    //responseStream=serialize(message);

     IoBuffer buffer = IoBuffer.allocate(responseStream.length);
    // buffer.putInt(response.length);
     //IoBuffer buffer=(IoBuffer)message;
      // buffer.putObject(message);
     System.out.println("Encoded Response:"+new String(responseStream));
     for(byte b:responseStream)
         System.out.print(b+",");
     System.out.println();
     buffer.put(responseStream);
//     lProxylogger.info("the response buffer size is "+ buffer.capacity());
     buffer.setAutoShrink(true);
    buffer.shrink();
  //  lProxylogger.info("After shrinking the buffer size is "+ buffer.capacity());
     buffer.flip();

    //System.out.println("Writing response to Stream..");
    out.write(buffer);

}
4

2 回答 2

5

有符号只是你如何解释一个字节的 8 位。通过签名既不长也不短,传输也没有什么不同。您只需发送字节。如果它是无符号的,则由任何解释该字节的东西将其视为无符号的,但这与将其表示为 8 位或发送它无关。

于 2013-04-08T05:38:04.470 回答
0

看来您选择的字符编码可能会损坏您的字符串。如果您还使用这样的编码,则不应尝试将二进制文件放入文本中。

我建议你简化你的代码。而是尝试

String response=(String) message;
for(char ch : response.toCharArray()) {
    System.out.println(Integer.toHexString(ch) + ", ");
    out.write(ch);
}

如果这可行,我建议尝试使用基本上相同的 ISO-8859-1 编码。

于 2013-04-08T07:10:07.553 回答