Java IO之Reader/Writer

原创 2015年07月06日 20:21:27

Reader和Writer:
Java 1.1对基本的I/O进行了修改,增加了Reader/Writer,但它们并不是用来替代InputStream和OutputStream的。InputStream/OutputStream面向字节,而Reader/Writer兼容Unicode且面向字符。

适配器:
有的时候我们必须把来自于“字节”层次结构中的类和来自“字符”层次结构中的类结合起来使用。为了实现这个目的,需要用到“适配器(Adapter)”类。InputStreamReader可以把InputStream转换为Reader,OutputStreamWriter可以把OutputStream转换为Writer。

Reader的子类:

CharArrayReader    对应于ByteArrayInputStream
FileReader         Reader/InputStreamReader下的子类,对应于FileInputStream
PipedReader        对应于PipedInputStream
StringReader       对应于StringBufferInputStream(已废弃)
FilterReader       对应于FilterInputStream
BufferedReader     对应于BufferInputStream,但它是直接继承Reader的。
LineNumberReader   Reader/BufferedReader下的子类,对应于LineNumberInputStream。
PushbackReader     Reader/FilterReader下的子类,对应于PushbackInputStream。

Writer的子类:

CharArrayWriter    对应于ByteArrayOutputStream
FileWriter         Reader/InputStreamReader下的子类,对应于FileOutputStream
PipedWriter        对应于PipedOutputStream
StringWriter       无相应的类
FilterWriter       对应于FilterOutputStream(抽象类,但没有子类)
BufferedWriter     对应于BufferOutputStream,但它是直接继承Reader的。
PrintWriter        对应于PrintStream

代码实例:
1 CharArrayReader/CharArrayWriter

    public void testCharArray(){
        char[] c={'a','b','c','d'};
        CharArrayReader r=new CharArrayReader(c);
        r.skip(2);
        char temp=(char) r.read();
        CharArrayWriter w=new CharArrayWriter();
        w.write(temp);
        System.out.println(w.size());
        System.out.println(w.toString());
    }
    /*
    Output:
    1
    c
    */

2 FileReader/FileWriter

    public void testFile() {
        File f=new File("FileReaderWriter.txt");
        FileWriter fw=new FileWriter(f);
        fw.write("Hello,this string is writed by FileWriter.");
        /* 此时数据还在缓冲区,需要刷新*/
        fw.flush();
        FileReader fr=new FileReader(f);
        int flag=0;
        while (flag!=-1){
            flag=fr.read();
            System.out.print((char)flag);
        }
    }
    /*
    Output:
    Hello,this string is writed by FileWriter.
    */

3 BufferedReader/BufferWriter
通常建议使用BufferedReader包装所有其read()操作开销可能较大的Reader,如FileReader;使用BufferedWriter包装所有其write()操作开销可能较大的Writer。

    public void testBuffered() {
        File f=new File("FileReaderWriter.txt");
        BufferedWriter bw=new BufferedWriter(new FileWriter(f));
        bw.write("This is the first day.\nThis is the second day.");
        bw.flush();
        BufferedReader br=new BufferedReader(new FileReader(f));        FileReader fr=new FileReader(f);
        String s=br.readLine();
        while(s!=null){
            System.out.println(s);
            s=br.readLine();
        }
    }
    /*
    Output:
    This is the first day.
    This is the second day.
    */
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

Java IO操作——字节流(OutputStream、InputStream)和字符流(Writer、Reader)

支持原创,谢谢原作者! 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序中需要数据的时候就用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成...

JAVA 的IO操作(三) 字符输出流和输入流:Writer和Reader

一、字符输出流 Writer 在程序中一个字符等于两个字节。那么Java提供了Reader和Writer两个专门操作字符流的类。 Class Writer java.lang...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

Java IO - Reader&Writer

基本概念 Reader/Writer(字符读取流/字符写入流),是所有字符操作流的父类。 它们本身是抽象类,主要实现方法包括 Reader(read,skip ),Writer(writer,appe...

JAVA IO系列----FileInputStream和FileOutputStream类,Reader和Writer类

·FileInputStream和FileOutputStream类分别用来创建磁盘文件的输入流和输出流对象,通过它们的构造函数来指定文件路径和文件名。

java IO之字节流和字符流-Reader和Writer以及实现文件复制拷贝

接上一篇的字节流,下面主要介绍字符流,字符流和字节流的区别以及文件复制拷贝。在程序中一个字符等于两个字节,而一个汉字占俩个字节(一般有限面试会问:一个char能否存下一个汉字,答案当然是能了,一个ch...

Java IO 文件流的读,文件流写Writer,Reader,InputStream,OutputStream封装

package com.app.io;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import jav...

Java-IO之字符输入输出流(Reader和Writer)

以字符为单位的输入流的公共父类是Reader: 以字符为单位的输出流的超类是Writer: 基于JDK8的Reader的源码: public abstract class Reade...

Java基础--------(7)IO流Reader和Writer

一、简述 Reader和Writer是专门用于读写字符流的抽象类。 Writer和Reader有许多子类,且子类肯定重写了父类的write或者read的方法。 字节流处理单元为1个字节, 操作字...

Java的IO操作(五) - PrintStream类、字符流、Reader和Writer、带缓冲的字符流BufferedReader和BufferedWriter .

1. PrintStream类 我们都知道,int类型在Java中占4个字节,如1在内存中表示为 00000000 00000000 00000000 00000001。如果我们直接使用Output...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)