字节流在基础部分使用中的常遇的小问题,以及字节流和字符流的对比.

java 专栏收录该内容
5 篇文章 0 订阅

很多刚接触的朋友在使用字节流和字符流时候会遇到一些小问题,网上搜索很难找到,现暂发布一些拙见,有问题欢迎多多提出.
先贴代码
在这里插入图片描述
第二处红标这个地方read读取的究竟是bytes数组中的什么?

答:这个地方是用到了bytes数组的内容,是作为缓冲区存在的.

fis,read,返回值是一个数字255,为什么是255?

答,这个返回值为255,是首个字节的内容 ,输入流的read方法的返回值,分为两种情况:使用数组和不使用数组,如果使用了数组,那么read方法的返回值就是存入的长度,如果不使用数组,返回值为当前字节.

fis.read(bytes)是否只是用到了bytes数组中的数组长度? (因为len=fis.read(bytes)) 如果只用到了数组的长度的话,那么为什么写数组的长度不行?

答,并不是用到其长度,而是让数组作为缓冲区的存在,用于中转,

fis.read()读取到的数据暂时存放在哪里? 是不是在内存中像队列一样write方法挨个写入?

答:(1),不使用数组的情况下,暂时存放在变量中(2)使用数组的情况下,存在数组.

为什么jpg传成txt文本后,随便删除任何一个数据,都会显示文件已损坏,是有什么机制检测吗?图片文件在字节里面是怎么保存和显示的?如果他是一块一块的,我删除一部分会不会可以显示,但是有一部分是空白.

答:因为编码的方式不同,删除掉的那一个部分和自己打的部分并不是完全相同的,虽然看着都一样,但是属性改变了.

对于字节流和字符流的对比:

字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?

区别主要是以下几个方面:
1,缓冲区,字符流自带缓冲区,字节流也可以使用缓冲区,但是是数组作为中转的伪缓冲区

提问:什么叫缓冲区?在很多地方都碰到缓冲区这个名词,那么到底什么是缓冲区?又有什么作用呢?

回答:缓冲区可以简单地理解为一段内存区域。可以简单地把缓冲区理解为一段特殊的内存。某些情况下,如果一个程序频繁地操作一个资源(如文件或数据库),则性能会很低,此时为了提升性能,就可以将一部分数据暂时读入到内存的一块区域之中,以后直接从此区域中读取数据即可,因为读取内存速度会比较快,这样可以提升程序的性能。在字符流的操作中,所有的字符都是在内存中形成的,在输出前会将所有的内容暂时保存在内存之中,所以使用了缓冲区暂存数据。如果想在不关闭时也可以将字符流的内容全部输出,则可以使用Writer类中的flush()方法完成。

2,字符流写入后需要刷新flush() , close()方法也可以替代这个效果,如果不刷新或者不写close()的话内容将不会保存,而字节流则不需要
3,Java的字节流
InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先。
Java的字符流
Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先。
以上内容部分摘自
https://blog.csdn.net/lwang_it/article/details/78886186

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值