一直认为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

解决方案 »

  1.   

    输出的是字符占的字节数,不是char类型在机器中占的字符数
    中文在机器中占两个字节,西文字符占1个字节
    char类型好像是占8个字节
      

  2.   

    java内存中char是两个字节,但是保存到文件中时另一回事,取决于文件的字符编码。
      

  3.   

    我说错了,试了下,char是两个字节,占16位
    int是4个字节,占32位
      

  4.   

    write(int c)函数api说是输出整形的底16位,我想那输出一定是两个字节呀,和文件的编码应该没有什么关系吧。
      

  5.   

    FileWriter这个类是面向字符的,并不是二进制字节。另外windows中文系统默认编码应该是GBK。
      

  6.   

    我还是不明白输出的为什么是1个字节,write(int c)的api说明明明是输出低16位,也就是两个字节,到底在说明地方给去掉一个了呢?
      

  7.   


        /**
         * Writes a single character.
         *
         * @exception  IOException  If an I/O error occurs
         */
        public void write(int c) throws IOException {
            se.write(c);
        }上面写着是写入一个字符。难道我的jdk跟你的不一样?
      

  8.   

    System.out.println(new char('x').SIZE); 输出结果是16 也就是两个字节
      

  9.   


    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
      

  10.   

    JAVA中是两个字节,其它语言多数应该是1个字节
      

  11.   

    字符与二进制之间是有对应关系的。这个转换过程叫编码,逆过程叫解码。
    Java语言,字符在内存中采用的是Unicode双字节定长编码。
    但是,你要是输出到文件中,就会存在一个编码转换的过程。
    一般WinXP系统,简体中文版的默认编码是GB2312编码,而不是Unicode编码,
    并且,你在使用FileWriter对象的时候,并没有指定具体的编码,那么默认编码就是操作系统的默认编码。
    所以,文件中的字符,采用的是GB2312编码,汉字占2个字节,ASCII字符占1个字节。
      

  12.   

    java中占两个字节,C中占一个字节
      

  13.   

    好像是明白一点了,但与API上说明比起来,还是感觉有点牵强。那就是API写法有问题。
      

  14.   

    JAVA的输入输出流类继承自:InputStream/OutputStream和Reader/Writer,前者用于位传输,以字节(Bytes)为传输单位;后者以字符(Character)为传输单位,适用于以Unicode编码的文字(如中文等亚洲语系)。      System.out.println(c); 使用的就是InputStream。      java的String使用Unicode,一个字符是两个字节的,而UTF-8则是采用1-3个字节 。
      

  15.   

    Java的char支持Unicode编码(是用16位来存储的),你可以给它一个汉字(两个字节),也可以给它赋值一个数值,但是你输出的是这个变量的值,和它用多少字节来存储没有关系。
      

  16.   

    fw.write(1);
    等价于
    char ch = 1;
    fw.write(ch);
    这样应该明白了吧
      

  17.   

    Java中的char用的是utf-16编码方案编码,如果是基本多语言级别的字符,用一个代码单元进行编码即可,一个代码单元是16位(2字节)。如果字符在附加的16个多语言级别中,字符的编码是两个代码单元,是4字节。可以百度一下utf-16编码方案。Java core中写的比较详细,可以多读几遍就比较清楚了,刚开始读会比较费解。