Java io --- 流(Stream)

流的概念

java中,流(stream)代表一个数据来源,或者一个数据目的地。Stream是对数据源的一种整体抽象,一个stream可以是一个文件,或者一个socket,在很多教程中,都提到可以将stream看成一个与目的数据源操之间的管道,我们利用这个管道从数据源中读取或者写数据,总之,只要我们获取到了一个流,我们对这个流的操作就会影响到流的另一端。图1和图2分别是利用了流读取和写数据。


图1 


图2

字符流和字节流

从图1和图2中能够看出,其实最终的流中流动的一定是01。对于输入流而言,程序把需要传输的二进制流放在流中,传到指定位置。

如果我们只需要操作byte,那么有字节流就够了,然而,我们在实际应用中,一般都需要编码,关于编码,大家可以再去网上看看,本文只做简单接受,比如对于同一个字符而言,不同的编码方式,可能需要不同的字节来对应,因此如果我们如果传输数据的时候只是简单的利用字节流,可能会出现问题,我这里做个简单的例子进行说明,假设我现在从AB传输数据,对于同一个字符,如果说我们传一个,但是Autf-8编码,可能是2个字节(这里只是假设),Butf-16解码,但是utf-16需要三个字节表示,当B接收到A的两个字节时,根本不认识这是个什么字,或者干脆解析成了其他的字符,所以这一定是行不通的。

                                      

                                 A------>B


为了便于我们对字符进行操作,java又提出了字符流的概念,即让A传输的时候以字符为单位。这里有一个问题,很多的教程里都说java里字节流和字符流是一种对立的关系,但是我认为这是一个误区

1:无论是字节流,字符流,电脑只认识01,任何数据的存储和传输都是以字节为单位的。

2:字符流,并不是说直接传输字符,而是将字符按照指定的编码规则,转成对应的字节流后进行传输。

3:虽然在java中字符流和字节流都是相对顶级的类(io中基础类),但是它们是有联系的,字符流其实只是对字节流的一个包装。

在节中,如果想要学的透彻,需要查看其他关于编码的问题,网上一堆,随便看看就行,关于字节流和字符流,后面我将用java的代码具体分析。


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值