一、InputStream和Reader的区别

InputStream和Reader都可以用来读数据(从文件中读取数据或从Socket中读取数据),最主要的区别如下:

InputStream用来读取二进制数(字节流),而 Reader用来读取文本数据,即 Unicode字符。那么二进制数与文本数据有什么区别呢?从本质上来讲,所有读取的内容都是字节,要想把字节转换为文本,需要指定一个编码方法。而 Reader就可以把字节流进行编码从而转换为文本。当然,这个转换过程就涉及编码方式的问题,它默认采用系统默认的编码方式对字节流进行编码,也可以显式地指定一个编码方式,例如“UTF-8″。尽管这个概念非常简单,但是Java程序员经常会犯一些编码的错误,最常见的错误就是不指定编码方式。在读文件或从 Socket读取数据的时候,如果没有指定正确的编码方式,读取到的数据可能就会有乱码,进而导致数据丢失。

二、FileInputStream和 FileReader的区别

FileInputStream和 FileReader有着类似的区别,它们都用于从文件中读取数据,但是FileInputStream用于从文件中读取二进制数据(字节流),而 FileReader用于从文件中读取字符数据。

FileReader 继承自 InputStreamReader,它要么使用系统默认的编码方式,要么使用 InputStreamReader所使用的编码方式。需要注意的是, InputStreamReader缓存了字符编码,因此,在创建 InputStreamReader对象以后,如果再对字符编码进行修改将没有任何作用。下面给出一个使用 Filelnputstream和FileReader的例子:


 
 程序的执行结果为:
       
         7465737420726561642066696c65
         test read file

从上面的代码可以看出, FilelnputStream读取数据的方式是一个字节一个字节地读取,因此,读取速度会比较慢,同时,read方法是一个阻塞方法,它要么读取到一个字节,要么阻塞(等待可被读取的数据),这个方法的返回值为读取到的字节数,当读取到文件结尾的时候,会返回-1。在使用FileInputStream的例子中,每个循环读取一个字节,然后转换为十六进制字符串输出。 FileReader I中的read方法每次读取一个字符,直到读取到文件结尾时,这个方法返回-1。
 
上海尚学堂Java培训技术干货之FileInputStream和 FileReader的区别就说明到此。更多Java技术知识文章请看本博客的其他文章,需要java学习资料视频请留言评论。尚学堂Java全套详细学习资料视频和Python400集视频以及程序员修炼手册,干货非常有。

转载于:https://www.cnblogs.com/shsxt/p/9809645.html

InputStream和Reader,FileInputStream和 FileReader的区别相关推荐

  1. Java学习之FileInputStream与FileReader的区别

    我们对于文件中数据的操作无非就有两种:读出与写入 对于Java来说,对数据的操作有字节流(FileOutputStream.FileInputStream)与字符流(FileWriter.FileRe ...

  2. InputStream Reader FileInputStream BufferedReader InputStreamReader FileReader FileInputStream和转换流

    原文地址,转发备忘 https://blog.csdn.net/liu940204/article/details/79994467 ava.io下面有两个抽象类:InputStream和Reader ...

  3. java-IO InputStream和Reader的区别和使用

    1.InputStream和Reader的区别? InputStream是表示字节输入流的所有类的超类 Reader是用于读取字符流的抽象类 InputStream提供的是字节流的读取,而非文本读取, ...

  4. java13 InputStream,Reader

    流的方向: 1.输入流:数据源到程序(InputStream,Reader读进来). 2.输出流:程序到目的地(OutPutStream,Writer写出来). 处理数据单元: 字节流:按照字节读取数 ...

  5. BufferedReader和FileReader的区别

    BufferedReader和FileReader的区别 ​ BufferedReader和BufferedWriter在内存中会自带一个8kb的字节缓冲区,并且他提供了一个程序员比较喜欢用的方法re ...

  6. Java 核心五个类(File、Outputstream、Inputstream、Reader、Writer)一个接口(Serializable)...

    java BIO(阻塞式IO)    java.io 核心五个类(File.Outputstream.Inputstream.Reader.Writer)一个接口(Serializable) 1.Fi ...

  7. FileInputStream、FileReader、FileWriter和File

    FileInputStream提供了对文件的字节读取 用于读取诸如图像数据之类的原始字节流 如:FileInputStream fis=new FileInputStream(new File(&qu ...

  8. FileInputStream与BufferedInputStream的区别

    FileInputStream是InputStream的子类,即从文件流中读取数据,它的父类InputStream是java中自带的输入流,位于java.io包下,是一个抽象类,实现Closeable ...

  9. python csv.reader_Python csv.reader与csv.dictreader的区别?

    有两个脚本,给出非常不同的结果.首先使用csv.reader,它运行良好,然后使用csv.dictreader,这给了我一些问题.两个脚本使用相同的数据集,两个文件之间的唯一区别是dictreader ...

最新文章

  1. jquery easyui datagrid实现单行的上移下移,以及保存移动的结果
  2. python:读取excel数据
  3. 3d 强制添加脚本_每日学点---Jenkins执行脚本权限问题
  4. 前端性能优化-DNS解析优化
  5. leetcoed123. 买卖股票的最佳时机 III
  6. Codeforces Round #675 (Div. 2)——F主席树待补?
  7. 清明梦超能力者黄YY[树链剖分+扫描线,线段树合并]
  8. JavaScript基础内容
  9. python3默认编码标准是_python3 编码
  10. ThinkPHP 3 的输出
  11. docker设置不同网络和迁移到指定网络
  12. 地产公司新建商业中心调研-调研内容
  13. 三八节送什么礼物比较好?这四款数码好物别错过了!
  14. 知行之桥2021版账号密码修改和重置指南
  15. [增强现实]Unity制作AR增强现实--茶壶(亲测)
  16. 51页大数据湖总体规划及大数据湖一体化运营管理方案
  17. 数量金融学(8):Markowitz均值-方差模型(2)
  18. MinIO 中的图片在前端列表渲染时报错 404
  19. 有感于董洁为子找幼儿园因不是外籍被拒 怪自己“不争气”
  20. 零跑科技上市:募资超60亿港元 在港股PK“蔚小理”

热门文章

  1. BZOJ 1113: [Poi2008]海报PLA
  2. C# 课堂总结2-数据类型及转换方式
  3. sqlite 字符串 转 整型 cast 函数 (强制类型转换 )
  4. PostgreSQL 8.4.3 Final / 9.0 Alpha 4
  5. ionic2开发的仿外卖点餐系统(Ionic2+Angular2
  6. 使用Apriori进行关联分析(一)
  7. Android类库介绍
  8. 机器学习02线性回归、多项式回归、正规方程
  9. 创梦天地通过聆讯:上半年经营利润1.3亿 腾讯持股超20%
  10. Spring Aop之Advisor解析