java的语法声明char本身长度为2个字节,它是为unicode量身定做的。应该按照2个字节来算。

解决方案 »

  1.   

    是两个字节,char在java中unicode表示
    2字节=16bit。
      

  2.   

    谢谢各位,我知道char的长度应该是两个字节,但是为什么把它加入到StringBuffer中只占一个字节的长度???
      

  3.   

    char的长度与编码是有关的:
    gb2312或GBK中有两字节或一字节,
    在UTF-8中都是两个字节,
    在iso8859-1中是一个字节,
    使用buf.toString().getBytes("UTF-8"),长度都是两字节。
      

  4.   

    谢谢guozhibo!但是buf.toString().getBytes("UTF-8"),任然是1个或者2各字节,buf.toString().getBytes("UTF-16"),到固定是4个字节,我不明白的是getBytes的转换过程,在StringBuffer的字符缓冲区内,字符到底是怎样存储的呢?比如说我要append(ch),这个ch在它的缓冲区内占用几个字节呢?如果说有时占用一个有时占用两个,那读出一个char时,怎么知道读出一个字节缓时两个字节呢??
      

  5.   

    Yes, char is indeed a 16-bit value. However, the actual answer is in the
    Java
    Language Specification, section 5.6.2, which is at the following URL:
    http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#170983
      

  6.   

    我明白了其中的原因了,getBytes过程实际上按照一定的编码方式作了字节转换,不过问题还是没有解决,我现在要向服务器端发数据包,为了识别每个包我必须在有用数据前后分别加包头包尾(0x81,0x84),但是PrintWrite类的print方法,在向网络些数据的时候实际上按照默认的编码方式也作了字节转换,而0x81,0x84在GBK中根本没有相应的字节,所以转换之后它们都成了固定的字节3F,而这并不是我想要的,我怎样才能向网络中发送原始的字节呢???????