试试:import java.io.FileOutputStream;
public class CharTest{
public static void main(String[] args) throws java.io.IOException{
char c = '我';
FileOutputStream out = new FileOutputStream("c:/test.txt");
out.write(("" + c).getBytes());
out.close();
out = new FileOutputStream("c:/test1.txt");
c = 'A';
out.write((int)c);
out.close();
}
}

解决方案 »

  1.   

    我现在是这样理解的
    在内存是char是unicode编码,占两字节,但是存成文件就要看是用哪种编码,utf-8,utf-16等都不相同的。是吗?可是又出现了这样的问题
                  out = new FileOutputStream("f:/test1.txt");
                  a = "A".getBytes("Unicode");
                  System.out.println(a.length); 
                  out.write(a);
                  out.close();
    文件的大小是四个字节
      

  2.   

    感觉是这样
    一个字节是FF,也就是256个字符,11111111
    当中ASCII编码常规字符部分的范围是0-127(其实是从32(空格)开始的),如果这个字节>127(1XXXXXXX),系统会按双字节字符来读取,如果<127(0XXXXXXX),自然都是一些单字节的符号,自然就按单字符对待了,既然这样,存文件的时候就没必要多浪费一个字节来保存了,所以就省略了.按你的说法,int在java中是占四个字节的,难道还真的用四个字节来保存1,2,3....不成?没研究过这方面的内容,只是个人观点,权当抛砖引玉
      

  3.   

    楼上说得有道理:
    如:
    out.write(1);
    得到文件的大小为1
    同写入char得到的大小一样
      

  4.   

    out.write('a');
    在jre里可能这样处理吧:
    byte[] tmp='a'.getBytes("GBK");    //"GBK"是根据你的系统得到的
    file.put(tmp);所以得到的是一个字节
      

  5.   

    谢谢个位。懂了很多了~!现在唯一不懂的问题就是,unicode里面的确是两个字节表示一个字符。我观察了一下专成unicode的byte[]数组。前两位总是FF FE. 如果 a = "AB".getBytes("Unicode"); 就是六个字节。因为前面多了FF FE。那这个FF FE倒底是什么呢。
      

  6.   

    unicode即UTF-16,是双字节的编码.如'1'表示成0x0031,0x0031在不同的CPU平台会有不同的表示,X86及其兼容机在内存里面表示成 31 00, ALPHA CPU会这样表示 00 31,即前者属于低位在前,后者属于高位在前. FF FE 的作用就是指示以后的字节的顺序模式是低位在前.不知道有没有说明白