字节跳动还是字符跳动

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字节跳动还是字符跳动相关的知识,希望对你有一定的参考价值。

字节跳动还是字符跳动

很多人对于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可以实现从字节转为字符

❤️ 感谢大家

如果你觉得这篇内容对你挺有有帮助的话:

  1. 欢迎关注我❤️,点赞

    以上是关于字节跳动还是字符跳动的主要内容,如果未能解决你的问题,请参考以下文章

    leetcode_字节跳动_挑战字符串_最长公共前缀

    字节跳动面试——算法

    字节跳动技术面都过了,结果还是被刷了,问HR原因竟是。。。

    薪资25k,我从字节跳动离职了...

    “备胎”5年,我一直在等...(外包——字节跳动)

    2022暑期实习字节跳动数据研发面试经历