当前位置: 代码迷 >> J2SE >> String类的有关问题
  详细解决方案

String类的有关问题

热度:11   发布时间:2016-04-23 20:45:01.0
String类的问题
最近学了IO操作,有个问题我想不明白。就是,你把字符串“123”打印到问件中时,它显示的内存大小是3字节。当我把这个文件采用字节流的方式读进来的时候,我只读了三位,然后byte[]转化成String类 的对象,然后通过String类的对象就可以在控制台上输出文件的内容,这是为什么?String不是采用16位的编码方式吗?也就是说每个字符都应该是2字节,但我只读进了3字节。这其中的转化机制是怎么样的?
------解决方案--------------------
String是采用16位的编码方式吗
------解决方案--------------------
“123”在内存中用6字节表示,用ANSI写到文件里是3字节,从文件读3字节得到长度为3的字节数组,再转为字符串后是6字节
可以看一下String的源码

    public String(byte bytes[], int offset, int length, Charset charset) {
        if (charset == null)
            throw new NullPointerException("charset");
        checkBounds(bytes, offset, length);
        char[] v = StringCoding.decode(charset, bytes, offset, length);
        this.offset = 0;
        this.count = v.length;
        this.value = v;
    }
  相关解决方案