一直认为java的char占2个字节,
FileWriter的write (int c)函数一直认为输出两个字节;
但今天测了下,结果和我想的不一样;FileWriter fw =new FileWriter("test.txt");
char c1 ='你';
char c2='1';
int i=1;
fw.write(c1);
fw.write(c2);
fw.write(i);
fw.close();输出我发现只有中文的占两个字节,其他输出都只有一个字节;好奇怪啊;
我的平台是xp 32位
java char write
FileWriter的write (int c)函数一直认为输出两个字节;
但今天测了下,结果和我想的不一样;FileWriter fw =new FileWriter("test.txt");
char c1 ='你';
char c2='1';
int i=1;
fw.write(c1);
fw.write(c2);
fw.write(i);
fw.close();输出我发现只有中文的占两个字节,其他输出都只有一个字节;好奇怪啊;
我的平台是xp 32位
java char write
中文在机器中占两个字节,西文字符占1个字节
char类型好像是占8个字节
int是4个字节,占32位
/**
* Writes a single character.
*
* @exception IOException If an I/O error occurs
*/
public void write(int c) throws IOException {
se.write(c);
}上面写着是写入一个字符。难道我的jdk跟你的不一样?
public void write(int c)
throws IOExceptionWrites a single character. The character to be written is contained in the 16 low-order bits of the given integer value; the 16 high-order bits are ignored.//函数说明是写入低16位,意思不就是输出两个字节吗?但我write(1)时,只有一个字节。
而我期望的是两个字节,也就是说输出的16进制为00 01
Java语言,字符在内存中采用的是Unicode双字节定长编码。
但是,你要是输出到文件中,就会存在一个编码转换的过程。
一般WinXP系统,简体中文版的默认编码是GB2312编码,而不是Unicode编码,
并且,你在使用FileWriter对象的时候,并没有指定具体的编码,那么默认编码就是操作系统的默认编码。
所以,文件中的字符,采用的是GB2312编码,汉字占2个字节,ASCII字符占1个字节。
等价于
char ch = 1;
fw.write(ch);
这样应该明白了吧