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集视频以及程序员修炼手册,干货非常有。
InputStream和Reader,FileInputStream和 FileReader的区别的更多相关文章
- [转]Java FileInputStream与FileReader的区别
在解释Java中FileInputStream和FileReader的具体区别之前,我想讲述一下Java中InputStream和Reader的根本差异,以及分别什么时候使用InputStream和R ...
- Java FileInputStream与FileReader的区别
在解释Java中FileInputStream和FileReader的具体区别之前,我想讲述一下Java中InputStream和Reader的根本差异,以及分别什么时候使用InputStream和R ...
- InputStream和Reader区别
InputStream,OutputStream 前者为字节输入流,后者为字节输出流.Reader Writer 前者为字符输入流,后者为字符输出流. 四个均为抽象类.fileInputStr ...
- InputStream和Reader
java.io下面有两个抽象类:InputStream和ReaderInputStream是表示字节输入流的所有类的超类Reader是用于读取字符流的抽象类InputStream提供的是字节流的读取, ...
- FileInputStream、FileReader、FileInputStream、FileWriter使用小结
本文是基于Linux环境运行,读者阅读前需要具备一定Linux知识 InputStream包含如下三个方法: int read():从输入流中读取单个字节,返回所读取的字节数据(字节数据可直接转化为i ...
- java13 InputStream,Reader
流的方向: .输入流:数据源到程序(InputStream,Reader读进来). .输出流:程序到目的地(OutPutStream,Writer写出来). 处理数据单元: 字节流:按照字节读取数据( ...
- java中OutputStream字节流与字符流InputStreamReader 每一种基本IO流BufferedOutputStream,FileInputStream,FileOutputStream,BufferedInputStream,BufferedReader,BufferedWriter,FileInputStream,FileReader,FileWriter,InputStr
BufferedOutputStream,FileInputStream,FileOutputStream,BufferedInputStream,BufferedReader,BufferedWri ...
- FileInputStream、FileReader、FileWriter和File
FileInputStream提供了对文件的字节读取 用于读取诸如图像数据之类的原始字节流 如:FileInputStream fis=new FileInputStream(new Fi ...
- ava.io.InputStream & java.io.FileInputStream
java.io.InputStream & java.io.FileInputStream java.io.InputStream,这个抽象类是表示字节输入流的超类,这个抽象类的共性的方法有: ...
随机推荐
- C语言的数组指针
数组(Array)是一系列具有相同类型的数据的集合,每一份数据叫做一个数组元素(Element).数组中的所有元素在内存中是连续排列的,整个数组占用的是一块内存.以int arr[] = { 99, ...
- thymleaf th:text="|第${user.courseSort}课|" 对于不知道的真的是解渴了
简单描述:最近再做一个课程管理,列表显示第几课,但是后台传递过来的只是数字0~9,意味着,我得自己拼了ヾ(◍°∇°◍)ノ゙ 我最烦的就是这种拼,各种难调,果真和我想的一样,4.5遍了还没出来. 我的 ...
- layUI 实现自定义弹窗
需求描述:点击表格中的数据,弹出一张具体信息表.描述的不是很清楚,放效果图,就明白了,上图 放心,能看到的数据,都不是生产数据,我造的假数据,但是功能效果就是这样,点击列表中的一行,弹出某些要展示的信 ...
- 前端校验插件——Validator简单使用
>>>>>>>>>>>>>>>>>>>>>>>>> ...
- 【HTTP】---HTTP状态码详解
https://en.wikipedia.org/wiki/List_of_HTTP_status_codes 1.百科名片 HTTP状态码(HTTP Status Code)是用以表示网页服务器HT ...
- 课堂小记---JavaScript(3)
操作DOM var newDOM=DOM元素.cloneNode(参数); 克隆(复制)当前节点,参数默认为false只复制当前节点元素.参数为true时复制当前元素及其后代和所有属性. day06 ...
- DbHelperSQL 增加事务处理方法(2种)
方法一: 1 public static bool ExecuteSqlByTrans(List<SqlAndPrams> list) { bool success = true; Ope ...
- Linux入门级
Linux及其发行版 我安装过的Linux发行版centOS.Kali.Ubuntu.rebHat. Reference Linux发行版排行榜 开源协议 Reference 开源协议 场景 说明一个 ...
- P2733 家的范围 Home on the Range-弱DP
P2733 家的范围 Home on the Range 思路 :转化为以每个点为右下角的 最大正方形的边长 #include<bits/stdc++.h> using namespace ...
- Shell脚本学习 - 基本内容以及数据格式
为了捞取日志,自己用python写了一些东西,大致套路就是读取写入文件的操作,放到linux上跑.实际使用时发现要操作的文件有时比较大,直接打开文件找需要的东西可能会有一些效率问题.所以学习一下she ...