字符流和字节流的区别

时间:2022-12-27 20:58:08

  其实,一直被这个问题所困扰,一直都没有解决,今天又碰到了这个问题,看来是必须要解决了,下面就对其进行对比一下

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(); } }

字符流和字节流的区别