为什么这段代码就可以把世界各国的文字都写到unicode.dat那里呢?
用字节流和字符流有什么不同啊??????多谢高手指教!import java.io.FileWriter;
import java.io.IOException;public class FileWriterTest { public static void main(String[] args) {
 FileWriter fw = null;
    try {
      fw = new FileWriter("c:/bak/unicode.dat");
      for(int c=0;c<=50000;c++){
        fw.write(c);
      }
      fw.close();
    } catch (IOException e1) {
     e1.printStackTrace();
      System.out.println("文件写入错误");
      System.exit(-1);
    }
  } }bak.dat文件里的内容,只贴出一部分出来


 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~????????????????????????????????????¤??§¨???????°±?????·???????????????????????????????×????????àá??????èéê?ìí????òó???÷?ùú?ü????ā?????????????????ē???????ě???????????????ī????????????????????????ń???ň????ō?????????????????????????????ū??????????????????????????????????????????????????????????????????????????????????????????????????ǎ?ǐ?ǒ?ǔ?ǖ?ǘ?ǚ?ǜ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ɑ???????????????ɡ?????????????????????????????????????????????????????????????????????????????????????????????????????ˇ?ˉˊˋ?????????????˙???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ?ΣΤΥΦΧΨΩ???????αβγδεζηθικλμνξοπρ?στυφχψω???????????????????????????????????????????????????????Ё??????????????АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя?ё????????????????????????????????????????????

解决方案 »

  1.   

    字节是根本,一个字节是8位(8 bit)
    字符是1个或多个字节组成。 比如
    ASCII 用一个字节就行了,最多256个
    那其它的呢?比如汉字?
    GBK编码里,用2个字节标识汉字
    UTF-8编码里,用3个字节标识汉字OVER
      

  2.   

    你就忽悠吧!
    1994年出版的《中华字海》有87019个汉字。那个write将char 以int值形式传入。一个字符相当二个byte。有一些另类字符在特殊编码下不是2个byte那么简单了。JVM 到 7 解决了UTF bug!
      

  3.   

    字符流处理的单元为2个字节的Unicode字符,而字节流处理单元为1个字节。
      

  4.   

    输出的是字节码。。字节流与字符流主要的区别是他们的的处理方式 
    字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的 
    但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化 
    这两个之间通过 InputStreamReader,OutputStreamWriter来关联,实际上是通过byte[]和String来关联 
    在实际开发中出现的汉字问题实际上都是在字符流和字节流之间转化不统一而造成的 在从字节流转化为字符流时,实际上就是byte[]转化为String时, 
    public String(byte bytes[], String charsetName) 
    有一个关键的参数字符集编码,通常我们都省略了,那系统就用操作系统的lang 
    而在字符流转化为字节流时,实际上是String转化为byte[]时, 
    byte[] String.getBytes(String charsetName) 
    也是一样的道理
    字符流和字节流是根据处理数据的不同来区分的。字节流按照8位传输,字符流按照16位传输 
    由于字符流使用Unicode字符集,支持多国文字,因此若流要跨越多种平台传输,应使用字符流。 
    按kilojin的说法,字符流的传输效率比字节流的高。JAVA中的字节流是采用ASCII编码的 
    ,字符流是采用好似UTF编码,支持中文的。
        流是一个有序的字节序列,可作为一个输入源,也可作为一个输出的目的地。字节流以字节为单位输入输出,字节流类名含有stream,字符流以字符为单位输入输出,字节流类名含有reader或writer.为了通用性,java中字符是16位的unicode字符,所以8位的字节流必须和16位的字符流进行转换。字节流到字符流的转换使用InputStreamReader类:
    public InputStreamReader(InputStream in);
    public InputStreamReader(InputStream in,String encoding);
    public OuputStreamWriter(OnputStream in);
    public OnputStreamWriter(OnputStream in,String encoding);
    Reader和Writer类允许用户在程序中无缝的支持国际字符集,如果要读区的文件是别国语言,要使用字符流。JavaI/O字节流与字符流就是java 实现输入/输出 数据 字节流是一个字节一个字节的输入/输出 数据 (两个字节组成一个汉字)所以在用字节流读一串汉字时会出现乱码问题,
    同样字符流是一个字符一个字符流(一个字符=两个字节)的输入/输出 数据 用字符流读一串汉字可以解决乱码问题.