字节跳动还是字符跳动

举报
周杰伦本人 发表于 2022/11/29 23:26:43 2022/11/29
【摘要】 字节跳动还是字符跳动 面向字节流的输入输出 面向字符流的输入输出 两者的选择 两者的转换 总结 字节跳动还是字符跳动坚持原创,写好每一篇文章很多人对于java的io流的概念不太理解,什么是流呢?它其实就是指的是能够产生数据和接收数据的对象。那么有字节流的操作和字符流的操作,我们分别看一下这两种 面向字节流的输入输出InputStream和OutputStream主要是对字节的处理,我们经常...

字节跳动还是字符跳动

坚持原创,写好每一篇文章

很多人对于java的io流的概念不太理解,什么是流呢?它其实就是指的是能够产生数据和接收数据的对象。那么有字节流的操作和字符流的操作,我们分别看一下这两种

面向字节流的输入输出

InputStream和OutputStream主要是对字节的处理,我们经常是对文件的操作,而这用到的类就是FileInputStream和FileOutputStream

面向字符流的输入输出

Reader和Writer主要是对字符的处理,Reader类是用于读取字符流的抽象类,它的子类需要实现 read()方法 和 close()方法。Writer类用于写入字符流的抽象类,它的子类需要的实现 write()方法、flush() 方法和 close()方法。

两者的选择

对应大部分场景下,Reader和Writer的相关类可以替代面向字节流的操作,有一些场景还不得不用字节流操作,也就是说能用Reader和Writer就用Reader和Writer。

两者的转换

有时候我们既需要对字符流操作,有需要对字节流操作,这就需要两者进行转换了,

而InputStreamReader和OutputStreamWriter充当了适配器的角色,会将字节流转换为字符流。

InputStreamReader 读取字节并使用指定的字符集将它们解码为字符。字符集可以作为参数来指定或者使用系统默认字符集。InputStreamReader 的 read() 方法在每次调用都可能从底层字节输入流中读取一个或多个字节。为了实现字节到字符的有效转换,可以从底层流中预先读取比满足当前读取操作所需的更多的字节。 官方建议通过BufferedReader来装饰InputStreamReader提高效率

BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 

OutputStreamWriter 写入它的字符使用指定的字符集编码为字节。同样的,字符集可以由名称指定,也可以显式给出,或者可以接受平台的默认字符集。 OutputStreamWriter的每次调用 write() 方法都会导致调用编码转换器。生成的字节在写入底层输出流之前累积在缓冲区中,我们要指定足够大的缓冲区,而传递给 write() 方法的字符不会被缓冲。 我们可以使用BufferedWriter装饰 OutputStreamWriter 避免频繁调用编码转换器

Writer out = new BufferedWriter(new OutputStreamWriter(System.out)); 

总结

这篇文章主要讲了面向字节流涉及到的类和面向字符流涉及到的类,我们大部分情况使用面向字符流的操作,因为字符是在字节流之后实现的,所有它提供了相应的适配器:InputStreamReader和OutputStreamWriter可以实现从字节转为字符

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。