黑马程序员技术交流社区

标题: FileReader和FileInputStream的疑问[已解决] [打印本页]

作者: 陈嘉宾    时间: 2012-6-3 19:49
标题: FileReader和FileInputStream的疑问[已解决]
本帖最后由 陈嘉宾 于 2012-6-3 21:06 编辑

下面是两段代码一个是FileReader的一个FileInputStream但是他们都是用的数组的方法来读取不是一个是用来读取字符流吗另一个读取字节流,但是区别在哪啊。有点迷糊啊,我想是不是跟char跟byte有关系啊?

class FileReaderDemo2
{
        public static void main(String[] args) throws IOException
        {
                FileReader fr=FileReader("demo.txt");

                //定义一个字符数组,用于存储到字符
                //该read(char[])放回的是读到字符个数

                char[] buf= nuw char[1024];

                int num= 0;
                while((num=fr.read(buf))!=-1)
                {
                        System.out.print(new String(buf,o,num));
                }
                fr.close();
        }
}





public static void readFile_2()throw IOException
        {
                FileInputStream fis=new FileInputStream("fos.txt");

                byte[]buf=new byte[1024];
                int len=0;
                while((len=fie.read(buf))!=-1)
                {
                        System.out.println(new String(buf,0,len));
                }
                fis.close
        }

作者: 袁錦泰    时间: 2012-6-3 20:11
本帖最后由 袁錦泰 于 2012-6-3 20:14 编辑

FileReader用于读取字符流
FileInputStream用于读取字节流
区别在于后者可以自定义字符编码,FileReader是FileInputStream的子类,是一个用来读取文件的便捷类.
去看看API,你就知道为什么定义缓冲区内存储数据的类型不同了!
作者: 何拴绪    时间: 2012-6-3 20:22
FileReader的read方法是继承的InputStreamReader的,最终还是继承Reader类的,read方法一次读取一个字符,存入字符数组中,返回最大字符数。InputStream的read方法一次读取一个字节,存入字节数组中,返回的是存入字节数组的字节总数。其实在源码中读取字符的方法还是通过读取字节来实现的。
作者: 黑马张扬    时间: 2012-6-3 20:24
FileReader:用于读取字符流   字符流处理的单元为2个字节的Unicode字符,主要操作字符,字符数组,或字符串
FileInputStream:用于读取字节流 字节流处理的单元为1个字节, 主要操作字节,字节数组.
作者: 胡团乐    时间: 2012-6-3 20:52
FileInputStream:以字节流方式读取;FileReader:把文件转换为字符流读入;
InputStream提供的是字节流的读取,而非文本读取,这是和Reader类的根本区别。用Reader读取出来的是char数组或者String ,使用InputStream读取出来的是byte数组。
Reader类及其子类提供的字符流的读取char(16位,unicode编码),inputStream及其子类提供字节流的读取byte(8位),所以FileReader类是将文件按字符流的方式读取,
FileInputStream则按字节流的方式读取文件;InputStreamReader可以将读如stream转换成字符流方式,是reader和stream之间的桥梁
最初Java是不支持对文本文件的处理的,为了弥补这个缺憾而引入了Reader和Writer两个类。
FileInputStream类以二进制输入/输出,I/O速度快且效率搞,但是它的read()方法读到的是一个字节(二进制数据),很不利于人们阅读。

作者: 陈嘉宾    时间: 2012-6-3 21:06
哦谢谢。明白了




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