A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王中利 中级黑马   /  2012-10-3 22:31  /  1461 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

比较FileInputStream流的read方法和FileReader流的read方法有什么异同点?

3 个回复

倒序浏览
很简单,一个是读的是字节,一个读的是字符
回复 使用道具 举报
主要区别应该是在读取编码的不同吧。。。。。
回复 使用道具 举报
首先,返回值都是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();
  }
}
}

评分

参与人数 1黑马币 +2 收起 理由
 ×_X_×  + 2 百度搜的

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马