常用输入字符流Reader

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用输入字符流Reader相关的知识,希望对你有一定的参考价值。

Reader是用于输入字符数据的,它所根据的 方法跟InputStream基本一样。它是所有输入字符流的抽象父类,因此不能直接构建Reader的实例,必须通过它的子类来构建。以下是几个常用的子类:

1、字符数组作为输入源——CharArrayReader

CharArrayReader包含一个内部缓冲区,该缓冲区包括从流中读取的字符数组。所谓内存缓存区,就是对应了内存中存在的字符数组,因此可以根据字符数组来创建该类的实例。它有以下两个构造函数:

CharArrayReader(char[] buf);  
CharArrayReader(char[] buf,int offset,int length);

以下是通过一个字符数组创建字符输入流的过程,并从该输入流中读取数据输出到控制台:

import java.io.CharArrayReader;
import java.io.IOException;

public class TestCharArrayReader {
    public static void main(String[] args) throws IOException {
        // 初始化字符数组
        char[] buf = new char[3];
        buf[0] = ‘a‘;
        buf[1] = ‘b‘;
        buf[2] = ‘c‘;
        // 创建输入流
        CharArrayReader car = new CharArrayReader(buf);
        // 从输入流中读取数据
        char buf2[] = new char[3];
        car.read(buf2);
        System.out.println(buf2);
        // System.out.println(new String(buf2));
        // 关闭输入流
        car.close();

    }
}

2、文件作为输入源——FileReader

FileReader是用来读取字符文件的便捷类。FileReader用于读取字符流,要读取原始字节流,请考虑使用FileInputStream。

FileReader实例可以通过以下的两种方式创建,既可以从文件对象创建,也可以直接根据文件名创建:

FileReader(File file);   //从文件对象创建
FileReader(String fileName);//直接根据文件名创建

下面程序演示如何读取一个磁盘文件来创建一个文件输入流,并循环读取该数据流中的数据并输出到控制台上

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class TestFileReader {
    public static void main(String[] args) {
        try {
            // 创建文件输入流
            FileReader fr = new FileReader("D:/demo/test.txt");
            // 从输入流中读取数据
            while (fr.ready()) {
                int i = fr.read();
                System.out.println((char) i);
                // 关闭输入流
                fr.close();
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

3、字符串作为输入源——StringReader

此类允许输入流由字符串内容提供,与CharArrayReader使用字符数组作为输入源类。穿件方法只有一个:

StringReader(String s);   //从字符串中读取

下面就是一个实例的创建过程

import java.io.IOException;
import java.io.StringReader;

public class TestStringReader {
    public static void main(String[] args) {
        // 创建字符串输入流
        StringReader sr = new StringReader("Hello world");
        // 从输入流中读取数据
        try {
            int c;
            while ((c = sr.read())!=-1) {
                System.out.print((char) c);
            }
            // 关闭流
            sr.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

4、缓存输入流——BufferedReader

BufferedReader从字符输入流中读取文本,缓存各个字符,从而实现字符、数组和行的高效读取。建议用BufferedReader包装所有其read()操作如FileReader和InputStreamReader开销很高的Reader。

创建方式有两种:

BufferedReader(Reader in);         //创建一个使用默认大小输入缓存区的缓存字符输入流
BufferedReader(Reader in,int sz);  //创建一个使用指定大小输入缓存区的缓存输入流

如果需要一个具有缓存的文件输入流,则应当组合使用FileReader和BufferedReader,这将能提高读取效率。以下就是将文件输入流对象转换为缓存流的过程:

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class TestBufferedReader {
    public static void main(String[] args) {

        try {
            // 创建文件输入流
            FileReader fr = new FileReader("D:demo/test.txt");
            // 创建数据缓存流
            BufferedReader br = new BufferedReader(fr);
            // 从输入流中读取数据
            while (br.ready()) {
                int c = br.read();
                System.out.print((char) c);
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

 

以上是关于常用输入字符流Reader的主要内容,如果未能解决你的问题,请参考以下文章

字符流Reader和Writer

字符流读写文本文件

字符流

字符输入流读取文本文件ReaderFileReaderBufferedReader

字符输入流读取文本文件ReaderFileReaderBufferedReader

Java IO_003.Reader与Writer--字符流以及编码对数据的操作(读取与写入)