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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/396449.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NGUI之输入文本框的使用

ToolBar中的两个红圈 另,代码如下:只需要定义一个变量即可,然后将控件drag到那里,真的是灰常方便呀 还有一个就是保存了(OK的响应),可以简单地理解为存档或读档 转载于:https://www.cnblogs.com/YTYMblog/p…

ae制作数据可视化_我如何精心制作真正可怕的数据可视化

ae制作数据可视化by Krist Wongsuphasawat克里斯特旺苏帕萨瓦(Krist Wongsuphasawat) 我如何精心制作真正可怕的数据可视化 (How I carefully crafted a truly terrible data visualization) Yes, you read that right. I am going to explain how I put together a really ba…

tensorrt轻松部署高性能dnn推理_实战教程:TensorRT中递归神经网络的介绍(中文字幕)...

NVIDIA TensorRT是一个高性能的深度学习推理优化器和运行时,它提供低延迟和高吞吐量。TensorRT可以从每个深度学习框架导入经过训练的模型,从而轻松地创建可以集成到大型应用程序和服务中的高效推理引擎。这个视频的五个关键点:1.TensorRT支持RNNv2, Mat…

w怎么接显示 树莓派zero_纯干货!一根线玩转树莓派ZeroW(图文教程,亲测有效)...

#一、写在前面本文旨在介绍如何用最少的外设(成本)完成树莓派Zero W最基础最重要的功能。注意:本文原始发表时官方镜像版本是2017-04-10的,在2019年5月10日有网友提出本方案已经不完全适用最新的镜像了,所以如果只是想按照本文所提出的步骤一…

十进制小数转换二进制的问题

2019独角兽企业重金招聘Python工程师标准>>> 整数和小数分别转换。 整数除以2,商继续除以2,得到0为止,将余数逆序排列。 22 / 2 11 余0 11/2 5 余 1 5 /2 2 余 1 2 /2 1 余 0 1 /2 0 余 1 所以22的二进制…

java操作mongodb(连接池)(转)

原文链接: java操作mongodb(连接池) Mongo的实例其实就是一个数据库连接池,这个连接池里默认有10个链接。我们没有必要重新实现这个链接池,但是我们可以更改这个连接池的配置。因为Mongo的实例就是一个连接池&#xff…

机器学习 一年入门_我作为自我入门程序员的一年回顾

机器学习 一年入门by Alin Rauta通过Alin Rauta 我作为自我入门程序员的一年回顾 (My Year as a Self-starter Programmer in Review) This was the most crucial year for my personal development ever. It was hard. Really hard. That’s why for me, the key word of 201…

声卡突然听不到监听_音乐人/键盘手伴侣物问题之:专业监听音箱的音质必须用独立声卡...

近日,不少朋友在后台留言,询问专业监听音箱连电脑听音乐要不要接个声卡!本期我们针对此问题,跟大家分享一些心得与经验。先回答问题,当然要!通常我们电脑上的音频输出口是这样的:而专业监听音箱…

helm3安装mysql_Helm3(kubernetes包管理工具)安装使用踩坑指南

image.png从结构中我们看到有不同级别的文件夹,以及一些yaml文件。charts: 用于存放其他依赖和关联的chart。例如应用依赖数据库的chart。Chart.yaml:存储一些元数据,例如chart的信息,描述等等templates文件夹&#xf…

矩阵快速幂及斐波那契数列模板

本篇博客先给出矩阵快速幂以及利用矩阵快速幂求斐波那契数列的模板&#xff0c;讲解待更新…… const int N10; int tmp[N][N]; void multi(int a[][N],int b[][N],int n) {memset(tmp,0,sizeof tmp);for(int i0;i<n;i)for(int j0;j<n;j)for(int k0;k<n;k)tmp[i][j]a…

Redis-3.2主从复制与集群搭建 推荐

Redis-3.2主从复制与集群搭建 一、Redis 主从搭建 1.下载并解压 yum install -y gcc gcc-c pcre zlib pcre-devel tcl wget http://download.redis.io/releases/redis-3.2.4.tar.gz tar -zxvf redis-3.2.4.tar.gz cd redis-3.2.4 make cd src && make test &&am…

AutoMapperHelper

/// <summary>/// AutoMapper帮助类/// </summary>public static class AutoMapperHelper{/// <summary>/// 单个对象映射/// </summary>public static T MapTo<T>(this object obj){if (obj null) return default(T);Mapper.CreateMap(obj.Ge…

web项目开发人员配比_我如何找到Web开发人员的第一份工作

web项目开发人员配比I have always had an interest in coding for the web. I built my first site almost 15 years ago using Yahoo’s Geocities, which allowed HTML styling and a few layout choices.我一直对网络编码感兴趣。 大约15年前&#xff0c;我使用Yahoo的Geoc…

苹果手机输入屏保后锁屏_修一块手机屏幕要7080元?

这几天华为Mate X的两次开售成为大家议论的话题&#xff0c;一些抢到的人自然沉浸在快乐之中&#xff0c;想着是自己留着用&#xff0c;还是转手赚一把。而一些想抢而没抢到的人或许正在研究如何在明天的第三次开售中抓好机会吧&#xff01;当然&#xff0c;也有像小编这样的&a…

中间介(MiddleWare)

引子-Django的生命周期 在学习中间介之前&#xff0c;我们先来回顾一下Django的生命周期&#xff1a;用户发起请求&#xff0c;请求会被发送到urlconf中的url&#xff0c;然后会指向对应的views函数进行处理&#xff0c;views函数处理完成后&#xff0c;用模板渲染好html&#…

对MariaDB10.0的Sphinx进行扩展

已修改过的文件&#xff1a;http://pan.baidu.com/s/1o8DHvkA 将这两个文件放到MariaDB的解压目录后&#xff0c;再进行安装 /usr/local/mariadb-10.0.28/storage/sphinx/ 如下是修改的代码 get_rec ( byte * buf, const byte * key, uint keylen,uint a,uint b,uint c );index…

C++常用特性原理解析

在我的早期印象中&#xff0c;C这门语言是软件工程发展过程中&#xff0c;出于对面向对象语言级支持不可或缺的情况下&#xff0c;一群曾经信誓旦旦想要用C统治宇宙的极客们妥协出来的一个高性能怪咖。 它驳杂万分&#xff0c;但引人入胜&#xff0c;出于多(mian)种(shi)原因&a…

容器created状态_docker容器状态的转换实现

一 docker容器状态转换图二 实战[rootlocalhost ~]# docker infoContainers: 0Running: 0Paused: 0Stopped: 0Images: 3Server Version: 17.09.0-ceStorage Driver: overlayBacking Filesystem: xfsSupports d_type: falseLogging Driver: json-fileCgroup Driver: cgroupfsPlu…

nodejs命令行执行程序_在NodeJS中编写命令行应用程序

nodejs命令行执行程序by Peter Benjamin彼得本杰明(Peter Benjamin) 在NodeJS中编写命令行应用程序 (Writing Command-Line Applications in NodeJS) With the right packages, writing command-line apps in NodeJS is a breeze.有了合适的软件包&#xff0c;用NodeJS编写命令…

python re findall 效率_python re模块findall()详解

今天写代码&#xff0c;在写到郑泽的时候遇到了一个坑&#xff0c;这个坑是re模块下的findall()函数。下面我将结合代码&#xff0c;记录一下importrestring"abcdefg acbdgef abcdgfe cadbgfe"#带括号与不带括号的区别#不带括号regexre.compile("((\w)\s\w)&quo…