java的inputstream, outputstream, reader和writer的比较

java的文件读写有多种方式,在此通过代码做以下比较。

比较一:FileWriter和FileReader

public class MyCode1 {

       public static void main(String[] args) throws IOException {

           File f = new File("my.txt");

           FileWriter fw = new FileWriter(f);
           fw.write("HELLO");
           fw.close();

           FileReader fr = new FileReader(f);
           System.out.println((char)fr.read());
           fr.close();

       }
}

输出: H

可见,FileWriter可以批量写入,但是FileReader每次只能读取一个字符。

比较二:OutputStream和InputStream

public class MyCode1 {

       public static void main(String[] args) throws IOException {

           File f = new File("my.txt");

           char[] data = new char[]{‘H‘, ‘E‘, ‘L‘, ‘L‘, ‘O‘};

           OutputStream os = new FileOutputStream(f);
           os.write(data[0]);
           os.close();

           InputStream is = new FileInputStream(f);
           System.out.println((char)is.read());
           is.close();

       }
}

输出: H

可见,OutputStream和InputStream每次只可以读写一个字符。

比较三:OutputStreamWriter和InputStreamReader

public class MyCode1 {

       public static void main(String[] args) throws IOException {

           File f = new File("my.txt");

           OutputStream os = new FileOutputStream(f);
           OutputStreamWriter osw = new OutputStreamWriter(os);
           osw.write("HELLO");
           osw.close();
           os.close();

           InputStream is = new FileInputStream(f);
           InputStreamReader isr = new InputStreamReader(is);
           System.out.println((char)isr.read());
           isr.close();
           is.close();

       }
}

输出: H

可见,OutputStreamWriter可以批量写入,但是InputStreamReader每次只能读取一个字符。效果同FileWriter和FileReader。

比较四:BufferedWriter和BufferedReader

public class MyCode1 {

       public static void main(String[] args) throws IOException {

           File f = new File("my.txt");

           OutputStream os = new FileOutputStream(f);
           OutputStreamWriter osw = new OutputStreamWriter(os);
           BufferedWriter bw = new BufferedWriter(osw);
           bw.write("HELLO");
           bw.close();
           osw.close();
           os.close();

           InputStream is = new FileInputStream(f);
           InputStreamReader isr = new InputStreamReader(is);
           BufferedReader br = new BufferedReader(isr);
           System.out.println(br.readLine());
           isr.close();
           is.close();

       }
}

输出: HELLO

可见,BufferedWriter和BufferedReader可以批量读写。

时间: 2024-08-27 00:20:44

java的inputstream, outputstream, reader和writer的比较的相关文章

Java之IO(十)Reader和Writer

转载请注明源出处:http://www.cnblogs.com/lighten/p/7071733.html 1.前言 之前的章节已经将Java8的io包中的字节流介绍完毕了.本章开始介绍Java的IO中另一个重要的体系,字符流.字节是给计算机看的,字符才是人能够认识的,可想而知字符流的重要性.字符流体系的根源在于抽象父类Reader和Writer.一切都起源于这两个类. 2.Reader Reader实现了Readable和Closeable接口,这两个接口从JDK1.5开始出现.Reader

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

学习目标 掌握流的概念 掌握字节流与字符流的作用 掌握文件的标准操作步骤 掌握字节与字符操作的区别 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序中需要数据的时候就用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输出都是以流的形式保存的,流中保存的实际上全部是字节文件. 字节流与字符流 在java.io包中操作文件内容的主要有两大类:字节流和字符流,两类都分为输入和输出操作.在字节流中输出数据主要是使用OutputStream完成,输入

Java流对象:InputStream、OutputStream、Reader、Writer

流对象使用完一般要用close方法关闭.释放资源. InputStream 和OutPutStream 二者都是字节输入和输出的抽象父类,子字节为单位处理数据,每次读取.写入一个字节,适合处理二进制文件,如:音频.视频.图片等. Redaer和writer是字符输入输出的抽象父类,以字符为单位处理数据,每次读取或写入一个字符,适合处理文本文件,实现类有FileReader和FileWriter. 附:Java代码实现图片文件的拷贝: package com.buaa.comparable; im

Java IO: Reader和Writer

作者: Jakob Jenkov 译者: 李璟([email protected]) Reader 原文链接 Reader是Java IO中所有Reader的基类.Reader与InputStream类似,不同点在于,Reader基于字符而非基于字节.换句话说,Reader用于读取文本,而InputStream用于读取原始字节. 请记住,Java内部使用UTF8编码表示字符串.输入流中一个字节可能并不等同于一个UTF8字符.如果你从输入流中以字节为单位读取UTF8编码的文本,并且尝试将读取到的字

Java IO: Reader And Writer

原文链接 作者: Jakob Jenkov  译者: 李璟([email protected]) Java IO的Reader和Writer除了基于字符之外,其他方面都与InputStream和OutputStream非常类似.他们被用于读写文本.InputStream和OutputStream是基于字节的,还记得吗? Reader Reader类是Java IO中所有Reader的基类.子类包括BufferedReader,PushbackReader,InputStreamReader,St

java 使用Reader和Writer对文件内容的拷贝

package com.hc.fileio; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.Reader; import java.io.Writer; /**对文件内容的拷贝 * @author MaskedMen *Reader和Writer只能读写字符流 */ public class ReaderWr

Java InputStream和Reader

1. 字节流和字符流的区别: 字节流操作的数据单元是8位的字节,而字符流操作的数据单元是16位的字符. 2. 节点流和处理流的区别: 可以从/向一个特定的IO设备(如磁盘.网络)读.写数据的流,称为节点流,也被称为低级流. 处理流则用于对一个已经存在的流进行连接或封装,通过封装后的流实现数据读写功能. 3. InputStream 和 Reader InputStream 和 Reader 是所有输入流的抽象基类,本身不能创建实例或执行输入,但成为所有输入流的模板,它们的方法是所有输入流都可使用

【JAVA I/O】字符输出流Writer简要概括

偷个懒,直接参考上篇字符输入流Reader的形式,其实Reader和Writer本来就大同小异: 字符输出流Writer 本篇将对JAVA I/O流中的字符输出流Writer做个简单的概括: 总得来说,每个字符输出流类都有一个对应的用途,如下: 字符输出流基类:Writer 字节流转字符流:OutputStreamWriter              //往字节输出流中写字符 字符文件写入相关:FileWriter                          //往文件中写字符 字符数组

字符流Reader、Writer,字符转换流 OutputStreamWriter、InputStreamReader

Reader.Writer是所有字符流的超类. Writer类方法 void write(String str) void write(char[] cbuf, int off, int len); void flush() void close OutputStreamWriter构造方法字符编码默认为系统编码,可以不写 FileWriter的append默认为false,可以不写.另一个构造(File file, boolean append) Writer out = new FileWr