微科社区,轻松开发从此开始! 请登陆 免费注册

微科社区

当前位置:首页 > Java平台 > J2SE >

求大神解答java io中read方法读取char时的疑惑

时间:2014-04-11 20:21  浏览:努力统计中...
Stringa= GIF ; ByteArrayInputStreambr=newByteArrayInputStream(a.getBytes()); for(inti=0;i6;i++){ System.out.println((char)br.read()); } 输出结果: G I F ? ? ? 我想请问一下: java中char占2个字节, GIF 占6字节,br.read()方
String a = "GIF";
ByteArrayInputStream br = new ByteArrayInputStream(a.getBytes());
for(int i=0;i<6; i++){
System.out.println((char)br.read());
}
输出结果:
G
I
F
?
?
?
我想请问一下:
java中char占2个字节,"GIF"占6字节,br.read()方法应该一次读取一个字节,每次读取返回一个int值,用char强转后,得到一个字符,但是read方法不是只读取一个字节吗,为什么会把两字节的char的asc码读取出来,而且只读了三次就完成读取了,按理说应该是读取6次才对啊,求大神解答!!

你先看下a.getBytes() 是采用哪个编码集, 可以用: Charset.defaultCharset().name()得到;
若是GBK或GB2312,那你就得注意下:
GB2312/GBK 中的所有字符都是用二个字节表示,但有个条件:是在 全角方式下;
若是在半角方式 下,是采用ASCII编码的,也就是1个字节了;

你仔细看下API
read
从此输入流中读取下一个数据字节。返回一个 0 到 255 范围内的 int 字节值
并不是说读一个字节!

默认utf-8编码,英文一个字节,中文三个字节,gbk英文一个字节,中文两个字节
上边说的英文是ascii码,文本读写用Reader和Writer

谢谢各位,我明白了,英文是一个字节存储的,中文的存储随编码不同而变化,感谢几位!
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%
    ------分隔线------