Elixir iodata和chardata
2023-12-15 14:23 更新
在上面的所有例子中,我们都使用二进制数来写入文件.在"二进制数,字符串和字符列表"那一章中,我们提到了字符串仅仅是字节而字符列表是代码点组成的列表.
IO
和File
模块中函数允许将列表作为参数.而且,他们也支持由列表,整数和二进制数混合而成的列表:
iex> IO.puts 'hello world'
hello world
:ok
iex> IO.puts ['hello', ?\s, "world"]
hello world
:ok
然而,需要注意的是,一个列表有可能是一串字节或者一串字符,而这取决于IO设备的编码.如果文件打开时没有指定编码,那么就是以生模式打开,而且必须使用IO
模块中以bin*
开头的函数.这些函数需要一个iodata
作为参数;它们需要一个代表字节和二进制数的整数列表.
另一方面,能够使用IO
模块中的其它函数处理:stdio
和以:utf8
编码打开的文件.这些函数需要一个char_data
作为参数,也就是一个字符或字符串的列表.
如果你想把一个列表传递给这些函数,你唯一要关心的就是这些微妙的差别.二进制数已经由字节来表示,因此,它们的属性是"生的".
关于IO设备和IO相关函数的介绍到此结束.我们已经学习了四个Elixir模块--IO
,File
,Path
和StringIO
,也学习了虚拟机是如何使用进程来从底层支持IO机制的,以及在IO操作中如何使用chardata
和iodata
.
以上内容是否对您有帮助:
更多建议: