日期:2014-05-20  浏览次数:20767 次

Java文件操作问题:字节流和字符流有什么区别?
字节流是由字节组成的,字符流是由字符组成的.Java里字符由两个字节组成.
但是我在使用FileInputStream和FileWriter发现输出的结果是一样的.下面是两个代码文件:  
file1:ByteStream.java
import   java.io.*;
public   class   ByteStream{
    public   static   void   main(String   args[])   throws   IOException   {
    File   inputFile   =   new   File( "E://A//partnovel.txt ");//定义文件,内容为: "She   went. "
    FileInputStream   in   =   new   FileInputStream(inputFile);
    //从输入流读数据,暂存于c,再写入输出流并显示输出流内容
    int   c;
    while((c   =   in.read())!=   -1){
            System.out.print(c+ "> > ");//每个字节之间加> > 符
    }
      in.close();
    }
}
file2:CharStream.java
import   java.io.*;
public   class   CharStream{
    public   static   void   main(String   arges[])throws   Exception{
        File   inputFile   =   new   File( "E://A//partnovel.txt ");////定义文件,内容为: "She   went. "
        FileReader   in   =   new   FileReader(inputFile);
        int   c;
        while((c   =   in.read())   !=   -1){
              System.out.print(c+ "> > ");
        }
        in.close();
    }
}
他们的结果都是:
115> > 104> > 101> > 32> > 119> > 101> > 110> > 116> > 46> >

这是为什么?请高手指点!

------解决方案--------------------
filereader是双字节的字符输入流,fileinputdream是单字符的字符输入流
FileReader 会做编码转换,FileInputStream会忠实于原始文件数据。任何形式的Reader都会涉及编码,你的程序只是因为使用了系统缺省编码(虽然在你看来没设过编码,和FileInputStream没区别)。

显示是另一回事,是显示给你的系统做的转换,如果在其他系统里就会显示其他东西。