字符流和字节流的区别
Posted lewisliu111
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符流和字节流的区别相关的知识,希望对你有一定的参考价值。
其实,一直被这个问题所困扰,一直都没有解决,今天又碰到了这个问题,看来是必须要解决了,下面就对其进行对比一下
1、在Python、Java中都有明确区分BytesIO和StringIO、有的语言好像并没有区分这个,所以它是需要将String编码后(如UTF-8),编码成Bytes再进行IO
Python如下:
# Python Code
# StringIO from io import StringIO f = StringIO() # BytesIO from io import BytesIO f = BytesIO()
Java目前还没有学习,暂留
其实BytesIO、StringIO都是IO,只是IO的东西不同,一个是IO bytes,一个是IO String,只是IO的东西不同,但是为什么要区分不同,在什么时候使用BytesIO,什么时候用StringIO,相信很多的人有着很大的迷惑,面对两难的抉择,无法选择。接下来我们来仔仔细细地分析一下。
字节流:普通的二进制流,也就是bits流,又因为在大多数情况下,我们的数据类型基本上使用8bits(1 byte)的整数倍来表示,所以字节是数据的最小基本单位
字符流:字节流的基础按照字符编码处理,处理的是char
因为有各种各样的不同的编码规范:ASCII、UTF-8等等
那么什么是后用BytesIO、什么时候用StringIO。。。emm,接下来就是了:
当我们读取Binary File时,应该用BytesIO,当我们读取StringIO时,应该用StringIO,当然你也可以用BytesIO,通过编码再写进去,但是这样很麻烦
当我们解决编码问题的时候,我们应该用ByteIO,无论要传输的是不是Binary或者String。比如利用Socket进行网络传输的时候,因为我们往往不知道对面电脑的编码方式,所以我们需要先将String decode成bytes,然后将bytes传过去,对面再Encoding成string,这样避免了乱码的情况,所以很多语言也就将stringIO和bytesIO独立开来,在某些API中甚至需要你传一个bytes型的参数。
世界上本没有字符流,因为我们在电脑中识字也就有了字符流。
就这样:
// C# Code
class Program { static void Main(string[] args) { byte[] a = { 0x48, 0x65, 0x6C, 0x6C, 0X6F}; Console.WriteLine(Encoding.UTF8.GetString(a)); Console.ReadKey(); } }
以上是关于字符流和字节流的区别的主要内容,如果未能解决你的问题,请参考以下文章