备考Python的时候的一道例题:
当文件以文本方式打开时,读取按照字符串方式。
当文件以二进制方式打开时,读取按照字节流方式。
那么,字节流是什么?流又是什么?
流是个抽象的概念,是对输入输出设备的抽象,输入流可以看作一个输入通道,输出流可以看作一个输出通道。
输入流输出流皆为相对程序而言,外部传入数据给程序需要借助输入流,程序把数据传输到外部需要借助输出流。
简单讲,流就是传输数据的基本单位的抽象,即最小单位的传输数据,理解为最基本数据就可以。
流体走过的地方叫形成了输入流和输出流。
什么是字节流? 字节流--传输过程中,传输数据的最基本单位是字节的流。 什么事字符流? 字符流--传输过程中,传输数据的最基本单位是字符的流。
由此可知,
字节流—— 衡量字节的最基本单位。
字符流—— 衡量字符的最基本单位。
那么字符和字节到底是个啥?
以下我们区分一下,字节和字符的区别,以及他们的关系:
字节数据是二进制形式的,要转成我们能识别的正常字符,需要选择正确的编码方式。我们生活中遇到的乱码问题就是字节数据没有选择正确的编码方式来显示成字符。 字符编码方式不同,有时候一个字符使用的字节数也不一样,比如ASCLL方式编码的字符,占一个字节;而UTF-8方式编码的字符,一个英文字符需要一个字节,一个中文需要三个字节。 从本质上来讲,写数据(即输出)的时候,字节也好,字符也好,本质上都是没有标识符的,需要去指定编码方式。 但读数据的时候,如果我们需要去“看数据”,那么字节流的数据需要指定字符编码方式,这样我们才能看到我们能识别的字符; 而字符流,因为已经选择好了字符编码方式,通常不需要再改了(除非定义的字符编码方式与数据原有的编码方式不一致!) 在传输方面上,由于计算机的传输本质都是字节,而一个字符由多个字节组成,转成字节之前先要去查表转成字节,所以传输时有时候会使用缓冲区。
我理解:
很多个字节流就形成了字节数据,很多个字符流形成了字符数据。
(所以字节跳动的意思是很多个视频or二进制形式的字节流在跳动吗?哈哈哈
综上:
字节数据(二进制形式)—编码形式—>字符数据
由于不同的编码方式导致对应的字节不同。
写数据的时候二者都需要制定编码方式,因为本质没有标识符。
读数据,字节数据需要转换成字符,所以需要制定编码方式;字符数据已经是字符了,通常不需要更改。
传输本质都是字节,所以字符需要转换成字节,字节无需改变。有时候会用缓冲区(缓冲区暂不清楚)
拜了个拜。