首页 > 其他分享 > InputStream和Reader区别

InputStream和Reader区别

时间:2023-06-21 15:22:17浏览次数:29  
标签:字符 读取 区别 BufferedInputStream InputStream Reader FileInputStream 字节

InputStream,OutputStream  前者为字节输入流,后者为字节输出流。
Reader   Writer  前者为字符输入流,后者为字符输出流。
四个均为抽象类。
fileInputStream 是InputStream 的实现类  
fileReader 是Reader 的实现类
字节流读取单位为一个字节,字符流读取单位为一个字符  所以读取汉字的时候,如果用字节流就会导致读出来乱码。这是最常用的地方  其他基本用法差不多。。

BufferedInputStream是套在某个其他的InputStream外,起着缓存的功能,用来改善里面那个InputStream的性能(如果可能的话),它自己不能脱离里面那个单独存在。FileInputStream是读取一个文件来作InputStream。所以你可以把BufferedInputStream套在FileInputStream外,来改善FileInputStream的性能。   

 

FileInputStream与BufferedInputStream区别:

FileInputStream是字节流,BufferedInputStream是字节缓冲流,使用BufferedInputStream读资源比FileInputStream读取资源的效率高(BufferedInputStream的read方法会读取尽可能多的字节),且FileInputStream对象的read方法会出现阻塞;

 

FileInputStream与FileReader区别:

FileInputStream是字节流,FileReader是字符流,用字节流读取中文的时候,可能会出现乱码,而用字符流则不会出现乱码,而且用字符流读取的速度比字节流要快;

 

ObjectOutputStream与ByteArrayOutputStream的区别:

ObjectOutputStream可以将java对象写入outputstream流中(序列化),然后进行持久化,此对象必须是实现了java.io.Serializable 接口;

ByteArrayOutputStream是将数据写入byte数组中;

 

了解“堵塞”的意思吧! 假设一个文件的长度是100个字节,要将之读取到内存中,再假设您每次只读取10个字节,那么读完整个文件是不是读取10次的呀?
假设老板让你完成100件事情,老板说,你每天只完成10件就可以了,难道你非得等到第十天才完成第100件事情吗?有一天您在中午下班前就完成了10件事情,下午您不妨多干一点,那么也许在第9天的时候就完成了100件事情。
同理,BufferedInputStream有可能会读取比您规定的更多的东西到内存,以减少访问IO的次数, 总之您要记住一句话,访问IO的次数越少,性能就越高,原因就在于CPU和内存的速度》》》》远大于硬盘或其他外部设备的速度。
换一个不太恰当的例子来说,您和您的朋友一起去登山,你朋友太不给力了,走一会儿就要休息,而您呢,您的体力比他要好的多,根本不需要休息,所以每当他休息的时候,您得等着他,您那时候什么也干不了,这就叫堵塞,堵塞就是说您有能力干某事,但是迫于某种原因您什么也干不了,只能干等。所以您朋友休息的次数越少,你们两个到达山顶所花费的时间就越少。CPU访问硬盘的次数越少,程序就越快。BufferedInputStream在小型文件中的性能优势无法体现出来,假设您将以个2G大小的文件从D盘完全复制到E盘,性能之优势便展露无疑!

复制代码
import java.io.*;
public class SS {
    public static void main(String[] args) throws Exception {
        File f = new File("d:\\大型数据库文件.mdf");    
        FileInputStream fis = new FileInputStream(f);
        //如果下面的语句使用BufferedOutputStream来修饰则带来更好的性能现。
        FileOutputStream fos = new FileOutputStream("e:\\" + f.getName());    
        int length = 0;
        byte[] b = new byte[1024];
        while((length = fis.read(b)) != -1)
        {
            fos.write(b, 0, length);
        }
        fos.close();
        fis.close();
    }
}

标签:字符,读取,区别,BufferedInputStream,InputStream,Reader,FileInputStream,字节
From: https://www.cnblogs.com/tiancai/p/17496302.html

相关文章

  • javainteger类-偷偷藏不住的想带大家领悟int 和 Integer 的区别
    其实在Java编程中,int和Integer都是非常常用的数据类型,但它们之间存在一些关键的区别,特别是在面向对象编程中。所以接下来,就让我们一起来探讨下关于int和Integer的区别这个问题吧。1.int和Integer的定义int是Java中的一种基本数据类型,用于表示整数。它是Java语言中最常用的数据类型......
  • 1p+n漏保和2p漏保区别?
    1.外观左:2P,右:1P+N左:宽,右:窄左:空开加漏电附件,右:一体 2.功能1P+N漏保和2P漏保的设计原理相同,都是通过检测电回路中的漏电流来判断电路是否出现漏电等危险情况,并立即切断电路以避免电击或火灾等事故发生。  不同之处在于,1P+N漏保是单极断路器,在电流仅流过一个触点时......
  • JSON.stringify()和JSON.parse()的区别(和toString())
    1.JSON.stringify()是把javascript对象转换成json字符串,JSON.parse()是把字符串转换成对象,toString可以把数组变成字符串                          toString()方法主要见:https://www.w3school.com.cn/jsref/jsref_tostring......
  • 有源晶振和无源晶振的区别
    转载文章:《有源晶振和无源晶振的区别》晶振从材质可以分为石英晶振和陶瓷晶振两大类,而从属性晶振可以分为无源晶振:crystal(晶体)和有源晶振:oscillator(振荡器)。石英晶振和陶瓷晶振从外观上非常有利于区分,毕竟也是两种完全不一样的材质。而无源晶振和有源晶振有时候让人傻傻分不清楚......
  • DDoS攻击和CC攻击的原理是什么?有何区别?
    近年来,随着移动互联网的高速发展,网络攻击的次数逐年增加,针对网站攻击也变得越来越频繁,而在众多攻击方式之中,最常见的应该就是CC攻击和DDoS攻击,尤其是一些防护能力欠佳的网站,一旦遭受攻击很容易瘫痪,造成不必要的麻烦。那么DDoS攻击和CC攻击的原理有何区别?本文为大家介绍一下。......
  • centos6 与centos7 防火墙区别
    CentOS(6x及之前版本,iptables)1、开启防火墙(重启后永久生效)[root@iZ2zef2r37ijinyvlpu77lZ~]$chkconfigiptableson2、关闭防火墙(重启后永久生效)[root@iZ2zef2r37ijinyvlpu77lZ~]$chkconfigiptablesoff3、开启防火墙(即时生效,重启后失效)[root@iZ2zef2r37......
  • oracle和MySQL区别在大数据上体现
    原文,https://blog.csdn.net/weixin_39569543/article/details/111090287结论:阿里java开发手册禁止三张表join大数据量下使用join导致数据冗余更大,MySQL处理不了过大的数据量,Oracle可以正常处理......
  • X86架构与Arm架构区别
    X86架构和ARM架构是主流的两种CPU架构,X86架构的CPU是PC服务器行业的老大,ARM架构的CPU则是移动端的老大。X86架构和arm架构实际上就是CISC与RISC之间的区别,很多用户不理解它们两个之间到底有哪些区别,实际就是它们的领域不太相同,然后追求也不相同。X86架构和Arm架构区别1、追求......
  • Nacos注册中心原理以及Eureka和Nacos的区别与联系
    nacos注册中心:服务提供者在注册中心注册服务信息服务消费者从注册中心定时拉取服务。【服务列表缓存,每隔30拉取更新列表】消费者远程调用服务提供者。服务注册到Nacos时,可以选择注册为临时或非临时实例,默认是临时实例采用心跳检测,每隔30s向注册中心发送心跳检测,当......
  • h265编码是什么意思,H265的编码和H264的编码有什么区别,视频编码h.264和mpeg4的对比
    MPEG-4标准则是基于对象和内容的编码方式,和传统的图像帧编码方式不同,它只处理图像帧与帧之间的差异元素,抛弃相同图像元素,因此大大减少了合成多媒体文件的体积,从而以较小的文件体积同样可得到高清晰的还原图像。换句话说,相同的原始图像,MPEG-4编码标准具有更高的压缩比。H.264编码技......