黑马程序员技术交流社区

标题: FileInputStream和 [打印本页]

作者: 王中利    时间: 2012-10-3 22:31
标题: FileInputStream和
比较FileInputStream流的read方法和FileReader流的read方法有什么异同点?
作者:  ×_X_×     时间: 2012-10-3 22:44
很简单,一个是读的是字节,一个读的是字符
作者:  ×_X_×     时间: 2012-10-3 22:47
主要区别应该是在读取编码的不同吧。。。。。
作者: 徐-星星    时间: 2012-10-3 22:53
首先,返回值都是int类型的。读取结果,都是当返回为-1时,表现全部信息读取完毕。
FileInputStream字节流是 以一个一个字节来读。
FileReader字符流是 以一个一个字符来读取的。字节跟字符的不同,去查java相关信息。
乱码问题:是由于 字节流不指定编码方式,取的是系统默认的编码方式。
请看以下程序,可以帮助你:(C盘根目录 建个 test.txt 内容为  java软件开发),运行看结果。

import java.io.FileInputStream;
import java.io.FileReader;
import java.io.InputStreamReader;


public class TestIoReader {
public static void main(String[] args) {
  try {
   //字符流
   FileReader fr = new FileReader("c:\\test.txt");
   int flag = -1;
   while((flag=fr.read())!=-1){
    System.out.print((char)flag);
   }
   System.out.println();
   //字节流 不指定编码。取系统底层编码
   InputStreamReader isr = new InputStreamReader(new FileInputStream("c:\\test.txt"));
   while((flag = isr.read())!=-1)
   {
    System.out.print((char)flag);
   }
   System.out.println();
   //编码gb2312
   isr = new InputStreamReader(new FileInputStream("c:\\test.txt"),"gb2312");
   while((flag = isr.read())!=-1)
   {
    System.out.print((char)flag);
   }
   System.out.println();
   //编码UTF-8
   isr = new InputStreamReader(new FileInputStream("c:\\test.txt"),"UTF-8");
   while((flag = isr.read())!=-1)
   {
    System.out.print((char)flag);
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
}
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2