java中明明已经有了字节流,为什么还要设置一个字符流

在计算机中,最小的存储单位就是字节,那么传输的时候以字节流的形式传输,可以保证数据不会出现错误,顶多就是编码出现问题。即,字节流可以传输所有文件而不出错,但是字符流就只能传输文本信息,传输图片,媒体等信息会出现错误。那么字符流能做到的,字节流都能做到。字节流能做到的,字符流不一定能做到,但是为什么还是会设置一个字符流呢?

首先,字符流是根据一个字符一个字符进行传输的,默认是utf-8,也就是说,只有当识别二进制代码判断出是一个字符的时候,就会传输,但是并不是所有二进制代码序列都有对应的字符,即无法识别的二进制序列,这个时候会默认将此段二进制序列更改为默认的二进制序列,而不再是原来的真实的序列了。因此才不能传输图片等媒体信息,因为图片信息存储的是每个像素点的颜色,什么序列都有可能。所以用字符集传输的时候会导致失真。

那么既然如此为什么不用字节流全面取代字符流呢?因为字节流在传输字符流的时候,是不管你是不是字符或者什么的,就只传输二进制序列,那么当你传输完后,想要识别这些序列的时候,就会需要再重新解码,而且在解码的时候,可能会出现编码错误。但是如果用字符流,那么在传输的时候,就会一个字符一个字符的传输,而不需要再进行编码或者解码的操作。比如原来一个汉字需要3个字节,用字节流需要分开3次,并且传输完毕后还要用utf-8重新解码,但是字符流的话,识别出这是一个汉字之后,直接就传输了3个字节。而传输完毕后也不需要再进行解码了。因此速度会快很多,也不会发生编码错误。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值