转自:https://blog.csdn.net/zxman660/article/details/7875799
https://blog.csdn.net/cynhafa/article/details/6882061
1.字节流与字符流
所有文件在磁盘中的存储都是字节形式,而字符是在内存中形成的。
- 字符流是对两个字节编码,比如说文本文件中存储字符串(一段英文或者汉字),有很多种编码吧,UTF-8、Unicode等;
- 而字节是一次只处理一个字节,比如说针对图片或者二进制文件。
适用情况:
字符流适用多国语言,关于文本的使用字符流比较好;而针对图片、视频、音频这些要使用字节流。
2.区别
字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的;而字符流在操作的时候是使用到缓冲区的,通过缓冲区再操作文件。
缓冲区是什么?
一段内存区域,
//字符需要转换为字节才能写入文件,那字节怎么就直接写入了?还是说因为读取的时候就需要那一段缓冲区来存储所有的字符,而不是专门在写出时开辟的内存吧,这样理解好一点。还是不太懂为什么字节流就可以直接操作,因为它不需要转换成字符?读进来直接写出?没有编码成字符的过程?那么这么说其实文本文件也可以通过字节流来操作了,就能实现不使用缓冲区写出?
3.联系
https://www.zhihu.com/question/39262026
字节,一个字节=8位,大多数情况下,字节是数据最小的基本单位。那么如何将字节表示为有意义的人类能够看懂的数据呢?就出现了不同的编码机制。
UTF-16中用两个字节来表示一个字符。
UTF-8中用到了可变长编码,用几位冗余信息告诉系统,当前字符有没有结束,是不是还需要继续往下读下一个字节。
那么视频是如何编码解码的呢?
https://zhuanlan.zhihu.com/p/93398878,https://zhuanlan.zhihu.com/p/143993517
针对图片来说,可以视为一个二维矩阵,彩色图片有RGB三个通道,可以实现编码解码。
那么对于视频,从时间序列上的帧,对画面可以进行隔行扫描等。
使用 VideoCapture视频捕获对象,去捕获视频流, opencv会自动完成视频流的解码操作,并返回视频流的编码格式、帧率等信息。