InputStream 、 InputStreamReader 、 BufferedReader三者的区别

InputStream、OutputStream

处理字节流的抽象类

InputStream 是字节输入流的所有类的超类,一般我们使用它的子类,如FileInputStream等.

OutputStream是字节输出流的所有类的超类,一般我们使用它的子类,如FileOutputStream等.

2.InputStreamReader  OutputStreamWriter

处理字符流的抽象类

InputStreamReader 是字节流通向字符流的桥梁,它将字节流转换为字符流.

OutputStreamWriter是字符流通向字节流的桥梁,它将字符流转换为字节流.

3.BufferedReader BufferedWriter

BufferedReader 由Reader类扩展而来,提供通用的缓冲方式文本读取,readLine读取一个文本行,

从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。

BufferedWriter  由Writer 类扩展而来,提供通用的缓冲方式文本写入, newLine使用平台自己的行分隔符,

将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

InputStream能从來源处读取一個一個byte,

所以它是最低级的,

例:

[java] view
plain
copy

  1. import java.io.*;
  2. public class Main {
  3. public static void main(String[] args) {
  4. try {
  5. FileInputStream fis=new FileInputStream("d://desktop//test.txt");
  6. int i;
  7. try {
  8. while((i=fis.read()) != -1){
  9. System.out.println(i);
  10. }
  11. /*假設test.txt檔裡頭只有一個文字 "陳" ,且其編碼為 utf8
  12. * 輸出
  13. *  233
  14. 153
  15. 179
  16. */
  17. } catch (IOException e) {
  18. // TODO Auto-generated catch block
  19. e.printStackTrace();
  20. }
  21. } catch (FileNotFoundException e) {
  22. // TODO Auto-generated catch block
  23. e.printStackTrace();
  24. }
  25. }
  26. }

InputStreamReader

InputStreamReader封裝了InputStream在里头,

它以较高级的方式,一次读取一个一个字符,

下例是假设有一个编码为utf8的文档,

其內容只有一个中文字 "陳"

[java] view
plain
copy

  1. import java.io.*;
  2. public class Main {
  3. public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException {
  4. FileInputStream fis=new FileInputStream("d://desktop//test.txt");
  5. try {
  6. InputStreamReader isr=new InputStreamReader(fis,"utf8");
  7. int i;
  8. while((i=isr.read()) != -1){
  9. System.out.println((char)i);  //輸出  陳
  10. }
  11. } catch (Exception e) {
  12. // TODO Auto-generated catch block
  13. e.printStackTrace();
  14. }
  15. }
  16. }

BufferedReader

BufferedReader则是比InputStreamReader更高级,

它封裝了StreamReader类,

一次读取取一行的字符

[java] view
plain
copy

  1. import java.io.*;
  2. public class Main {
  3. public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException {
  4. FileInputStream fis=new FileInputStream("d://desktop//test.txt");
  5. try {
  6. InputStreamReader isr=new InputStreamReader(fis,"utf8");
  7. BufferedReader br=new BufferedReader(isr);
  8. String line;
  9. while((line=br.readLine()) != null){
  10. System.out.println(line);
  11. }
  12. } catch (Exception e) {
  13. // TODO Auto-generated catch block
  14. e.printStackTrace();
  15. }
  16. }
  17. }
时间: 2024-11-13 11:57:44

InputStream 、 InputStreamReader 、 BufferedReader三者的区别的相关文章

Java 之 FileReader FileInputStream InputStreamReader BufferedReader 作用与区别

一直搞不清楚FileReader FileInputStream InputStreamReader BufferedReader 之间的区别联系,每次写读取文档的java程序都是网上百度.今天专门就这个问题进行了深入探讨. 一.来源 java.io下有两个抽象类InputStream和Reader,上述类都是继承了这两个超类.它们之间区别是:InputStream是字节流的输入,Reader是字符流输入. 二.具体每类 InputStream    | __FileInputStream Fi

JAVA IO InputStream InputStreamReader BufferedReader

InputStream.OutputStream 处理字节流的抽象类,InputStream能从來源处读取一個一個byte,所以是最低级的.InputStream 是字节输入流的所有类的超类,一般我们使用它的子类,如FileInputStream等 InputStreamReader  OutputStreamWriter 处理字符流的抽象类,是字节流通向字符流的桥梁,它将字节流转换为字符流.它以较高级的方式,一次读取一个一个字符. BufferedReader BufferedWriter B

InputStreamReader和FileReader的区别

/* BufferedReader InputStreamReader 转换流 */ import java.io.*; public class BufferedReaderTest02 { public static void main(String[] args) throws Exception{ /* //创建带有缓冲区的字符输入流 FileInputStream fis = new FileInputStream("BufferedReaderTest02.java");

Android笔记:利用InputStream和BufferedReader 进行字节流 字符流处理

通过socket获取字节流处理时最初使用的是BufferedReader和PrintWriter  这种方式在解析字符串时是比较方便的 但是在处理字节时不够方便最终还是回归到InputStream和OutputStream方式 不使用缓存直接使用字节流操作,一次传输的字节数据在300字节以内,目前没有测试差距会有多大. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException;

C#中数组、ArrayList和List三者的区别

在C#中数组,ArrayList,List都能够存储一组对象,那么这三者到底有什么样的区别呢. 数组 数组在C#中最早出现的.在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单. [csharp] view plaincopy <span style="font-family:SimSun;font-size:18px;">//数组 string[] s=new string[2]; //赋值 s[0]="a"; s[1]=&quo

菜鸟,大牛和教主,三者的区别(转载,有种莫名的喜感。。。)

对菜鸟来说题目有三种:会算法且能AC的,会算法但不能AC的,不会做的 对大牛来说题目有两种:会做的,不会做的 对教主来说题目有两种:能AC的,数据有错的 菜鸟提交WA了,找了N久找不出错时,在论坛大骂数据有错,但是没人理 大牛提交WA了,找了N久找不出错时,写暴力程序或者求别人的AC程序对拍 教主提交WA了,Judge马上修正数据 菜鸟面对一道难题,直接暴搜 大牛面对一道难题,算了算时间复杂度不对,或者证明出是NP难,果断放弃 教主面对一道难题,说,虽然我不会做,但AC还是没有问题的 菜鸟AC了

菜鸟,大牛和教主三者的区别(转自hzwer)

菜鸟,大牛和教主,三者的区别 对菜鸟来说题目有三种:会算法且能AC的,会算法但不能AC的,不会做的 对大牛来说题目有两种:会做的,不会做的 对教主来说题目有两种:能AC的,数据有错的 菜鸟提交WA了,找了N久找不出错时,在论坛大骂数据有错,但是没人理 大牛提交WA了,找了N久找不出错时,写暴力程序或者求别人的AC程序对拍 教主提交WA了,Judge马上修正数据 菜鸟面对一道难题,直接暴搜 大牛面对一道难题,算了算时间复杂度不对,或者证明出是NP难,果断放弃 教主面对一道难题,说,虽然我不会做,但

SIEM、SOC、MSS三者的区别与联系

SIEM.SOC.MSS三者的区别与联系 前言 SIEM和SOC在国内并不是一个新兴的名词,相反在国内安全圈内经过了10余年的挣扎,SIEM已经趋于成熟,但是SOC仍处于一个鸡肋的位置,我认为其主要原因在SOC受制于国内体制.政策.相关日志标准.应用环境.传统认识的制约,从而它在国内一开始就是以产品的方式出现.缺少了MSS的辅助SOC就像是要求汽车驾驶员去驾驶维护飞机,这也是国内SOC一直无法用起来的主要原因. 而以SOC为基础的MSS(可管理安全服务)一直无法发展状大的原因有二. 欧美国家对M

转:c++里关于cerr,clog,cout三者的区别

c++里关于cerr,clog,cout三者的区别: cerr(无缓冲标准错误)-----没有缓冲,发送给它的内容立即被输出 clog(缓冲标准错误)--------有缓冲,缓冲区满时输出 cout-------------------------标准输出 三个都是ostream类定义的输出流对象, cout是在终端显示器输出,cout流在内存中对应开辟了一个缓冲区,用来存放流中的数据,当向cout流插入一个endl,不论缓冲区是否漫了,都立即输出流中所有数据,然后插入一个换行符. cerr流对