InputStream和Reader,FileInputStream和 FileReader的区别
一、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的区别相关推荐
- Java学习之FileInputStream与FileReader的区别
我们对于文件中数据的操作无非就有两种:读出与写入 对于Java来说,对数据的操作有字节流(FileOutputStream.FileInputStream)与字符流(FileWriter.FileRe ...
- InputStream Reader FileInputStream BufferedReader InputStreamReader FileReader FileInputStream和转换流
原文地址,转发备忘 https://blog.csdn.net/liu940204/article/details/79994467 ava.io下面有两个抽象类:InputStream和Reader ...
- java-IO InputStream和Reader的区别和使用
1.InputStream和Reader的区别? InputStream是表示字节输入流的所有类的超类 Reader是用于读取字符流的抽象类 InputStream提供的是字节流的读取,而非文本读取, ...
- java13 InputStream,Reader
流的方向: 1.输入流:数据源到程序(InputStream,Reader读进来). 2.输出流:程序到目的地(OutPutStream,Writer写出来). 处理数据单元: 字节流:按照字节读取数 ...
- BufferedReader和FileReader的区别
BufferedReader和FileReader的区别 BufferedReader和BufferedWriter在内存中会自带一个8kb的字节缓冲区,并且他提供了一个程序员比较喜欢用的方法re ...
- Java 核心五个类(File、Outputstream、Inputstream、Reader、Writer)一个接口(Serializable)...
java BIO(阻塞式IO) java.io 核心五个类(File.Outputstream.Inputstream.Reader.Writer)一个接口(Serializable) 1.Fi ...
- FileInputStream、FileReader、FileWriter和File
FileInputStream提供了对文件的字节读取 用于读取诸如图像数据之类的原始字节流 如:FileInputStream fis=new FileInputStream(new File(&qu ...
- FileInputStream与BufferedInputStream的区别
FileInputStream是InputStream的子类,即从文件流中读取数据,它的父类InputStream是java中自带的输入流,位于java.io包下,是一个抽象类,实现Closeable ...
- python csv.reader_Python csv.reader与csv.dictreader的区别?
有两个脚本,给出非常不同的结果.首先使用csv.reader,它运行良好,然后使用csv.dictreader,这给了我一些问题.两个脚本使用相同的数据集,两个文件之间的唯一区别是dictreader ...
最新文章
- jquery easyui datagrid实现单行的上移下移,以及保存移动的结果
- python:读取excel数据
- 3d 强制添加脚本_每日学点---Jenkins执行脚本权限问题
- 前端性能优化-DNS解析优化
- leetcoed123. 买卖股票的最佳时机 III
- Codeforces Round #675 (Div. 2)——F主席树待补?
- 清明梦超能力者黄YY[树链剖分+扫描线,线段树合并]
- JavaScript基础内容
- python3默认编码标准是_python3 编码
- ThinkPHP 3 的输出
- docker设置不同网络和迁移到指定网络
- 地产公司新建商业中心调研-调研内容
- 三八节送什么礼物比较好?这四款数码好物别错过了!
- 知行之桥2021版账号密码修改和重置指南
- [增强现实]Unity制作AR增强现实--茶壶(亲测)
- 51页大数据湖总体规划及大数据湖一体化运营管理方案
- 数量金融学(8):Markowitz均值-方差模型(2)
- MinIO 中的图片在前端列表渲染时报错 404
- 有感于董洁为子找幼儿园因不是外籍被拒 怪自己“不争气”
- 零跑科技上市:募资超60亿港元 在港股PK“蔚小理”
热门文章
- BZOJ 1113: [Poi2008]海报PLA
- C# 课堂总结2-数据类型及转换方式
- sqlite 字符串 转 整型 cast 函数 (强制类型转换 )
- PostgreSQL 8.4.3 Final / 9.0 Alpha 4
- ionic2开发的仿外卖点餐系统(Ionic2+Angular2
- 使用Apriori进行关联分析(一)
- Android类库介绍
- 机器学习02线性回归、多项式回归、正规方程
- 创梦天地通过聆讯:上半年经营利润1.3亿 腾讯持股超20%
- Spring Aop之Advisor解析