我从一个文件中,读数据出来,数据是String型。
     我的做法是首先读一个byte的字符串strchars.然后再把strchar转换成要输出的字符串。我用了两种方法。发现了出现以下不同。
     如果说我直接用a=String(strchars)来取,在用System.out.print(a)。发现打印在控制台的字母,每个字母都要占两个字符的位置。
     但是如果我用 a= ByteBuffer.wrap(strchars).asCharBuffer().toString()来取,然后再在控制台打印,每个字母就占一个字符的位置。
     想请教一下,这有什么说法么?

解决方案 »

  1.   

         ByteBuffer buf;
         buf = ByteBuffer.allocate(1024);
         buf.get(strchars);  //取得byte数组
         Stringdata = ByteBuffer.wrap(strchars).asCharBuffer().toString();
         System.out.print(Stringdate).
         这种情况下打印的是正常的。比方说Stringdata= "aa" ,那么打印的就是aa
         
         ByteBuffer buf;
         buf = ByteBuffer.allocate(1024);
         buf.get(strchars);  //取得byte数组
         Stringdata = String(strchars);
         System.out.print(Stringdate).
         这种情况下,打印出来的是就是每个a都占两个自己的位置
      

  2.   

    一下为sun提供的关于asCharBuffer()的说明
    asCharBuffer()
    public abstract CharBuffer asCharBuffer()创建此字节缓冲区的视图,作为 char 缓冲区。 
    新缓冲区的内容将从此缓冲区的当前位置开始。此缓冲区内容的更改在新缓冲区中是可见的,反之亦然;这两个缓冲区的位置、界限和标记值是相互独立的。 
    新缓冲区的位置将为零,其容量和界限将为此缓冲区中所剩余的字节数的二分之一,其标记是不确定的。当且仅当此缓冲区为直接时,新缓冲区才是直接的,当且仅当此缓冲区为只读时,新缓冲区才是只读的。
    在java中字符占用两个字节
      

  3.   

        谢谢楼上的。
        不过再看了楼上的解释之后,我产生了一个问题。
        CharBuffer,和ByteBuffer中一个字节占的bit位是不是一样的?
        因为如果一样,数据是死的。比方说16bit。那么在bytebuffer里面就是2个字节。而Charbuffer里面如果也是一个8bit一个字节的话,那么转化之后,就会有8bit字节的损失。
        但是我不知道这样理解对不对。
      

  4.   

    java中的字符用两个字节表示(规定),
    就像int类型在不同系统中有区别一样
    char类型只需8位就足够,至于8bit的损失好像是有!呵呵
      

  5.   

           XinVSYuan。我试过,一个汉字应该占2个byte吧。我存储汉字,最后结果是能正常读写。所以说,我觉得不应该存在8bit丢失的问题。
           不知道这有什么其他解释么?