本帖最后由 outsinre 于 2013-04-22 19:24:42 编辑

解决方案 »

  1.   

    运行结果:
    16
    32
    HOWAREYOUHHHHHH?
    上面的16跟编码方式有关系,如果 str.getBytes("UTF-16").length ,则返回34
      

  2.   

    为何跟编码有关系,不是java里面一个char是2字节吗,那么str转换成byte后肯定长度是2倍关系,奇怪。我现在最关心的是,如果要顶一个byte[]数组来存放str,那么这个数组应该是多长?
    应用场景是:str.getByte()被写入到一个OutputStream里,另一个线程从InputStream里又重新读出来了(这中间要用管道)。那么读出来时肯定要一个临时byte[]缓存。
    所以我必须要定义byte[]缓存大小。
      

  3.   

    java里的字母是一个字节   汉字才是两个字节
      

  4.   

    字符串转换成字节  直接用getBytes()就行   不用new一个指定大小的Byte数组
      

  5.   

    编码格式的不同,使得字符串转换为的字节不尽相同,因而字节数目也不是固定的
    应该通过指定的编码格式,来达到控制最终的字节数目。
    若使用GBK编码方式,最终的输出结果是10 20
    使用其他编码方式(可能是自行指定,或者是当前环境的默认编码格式),
    必须先要得知此编码方式的具体名称,
    然后查看在该编码格式下,字符串与字节是如何转换的。
    最终确定字符串被转换后,获取的字节数目。
      

  6.   

    String.getBytes() 返回的是默认编码格式组成的byte[]。这里的默认编码格式是通过调用Charset.defaultCharset()来决定。看JDK的代码:
        public static Charset defaultCharset() {
            if (defaultCharset == null) {
            synchronized (Charset.class) {
            java.security.PrivilegedAction pa =
                new GetPropertyAction("file.encoding");
            String csn = (String)AccessController.doPrivileged(pa);
            Charset cs = lookup(csn);
            if (cs != null)
                defaultCharset = cs;
                    else 
                defaultCharset = forName("UTF-8");
                }
        }
        return defaultCharset;
        }如果你没有用什么设置,从命令行运行jvm,应该会用UTF-8编码,ASCII都是一个byte,所以长度是10。GBK跟UTF-8类似,ASCII也是一个byte。至于一个char等于两个byte,那是JVM内部表示String的时候统一用UTF16BE,而getBytes()实际上也是经过转换的。