Python中BufferedIOBase

class io.BufferedIOBase
  是支持某些缓冲区的二进制流的基类。它继承自IOBase,没有公共的构造器。和RawIOBase主要的区别在于,方法read(),readinto()和write()会尽可能(分别)的多读所请求的输入或者尽可能的输出所有给定的输出,以牺牲多个系统调用为代价。

  另外,如果底层原始流处于非阻塞模式并且无法获取或提供足够的数据时,那些方法可能会引发BlockingIOError错误;和RawIOBase不同的是,他们永远不会返回None。

  此外,read()方法没有一个按照readinto()的默认实现。

  典型的BufferedIOBase的实现不应该继承自RawIOBase实现,但是wrap部分,比如BufferedWriter和BufferedReader却是继承自RawIOBase的实现。

  BufferedIOBase提供或者重写了从IOBase中继承来的属性和方法。
raw:
BufferedIOBase处理的底层原始流,这不是BufferedIOBase的API的一部分,可能在某些实现中不存在。

detach()
    将底层原始流从缓冲区中分开并返回
    在原始流被分离之后,该缓冲区变为不可用状态
    某些缓冲区,比如BytesIO,没有从该方法中返回单个原始流的概念,它们会引UnsupportedOperation。

read(size=-1)
    读取并返回至多size大小的字节。如果参数被省略,或者为None,或者为负数,那么读取 直到遇到EOF才停止,并且将数据返回。
如果流中游标已经是EOF处,那么返回的是一个空的字节对象。
    如果参数是正数,并且底层原始流不是可交互式的,那么发出多个原始读取操作以读满需要的字节数(除非首先到达EOF)。
    但是对于交互式原始流,最大只会发出一个原始读取操作,短的结果并不意味着即将遇到EOF。
    如果底层原始流处于非阻塞模式,并且目前没有可用数据,则会引发BlockingIOError错误。

readl(size=-1)
    读取并返回至多size大小的字节,最多值只能调用一次预测底层原始流的read()(或者readinto()方法)方法。这将是非常有用的
    ,如果您在BufferedIOBase对象上实现自己的缓冲区。

readinto(b)
    读取字节到一个已经指定大小的,可以写的类字节对象b中,并且返回读取的字节数。
    和read()类似,多个读取操作可能被发给底层原始流,除非后者是可交互的。
    如果底层原始流处于非阻塞模式,并且目前没有可用数据,则会引发BlockingIOError错误。

readintol(b)
    读取字节到一个已经指定大小的,可写的类字节对象b中,最多只能调用一次底层原始流的read()(或者readinto())方法。
返回读取的字节数量。
    如果底层原始流处于非阻塞模式,并且目前没有可用数据,则会引发BlockingIOError错误。

write(b)
    将给定的类字节对象b写入,并且返回写入的字节数(总等于b的长度(以字节为单位),如果写入失败,则会引发OSError)。
    根据实际的实现,这些字节可能正准备写入到底层流中,或者由于性能和延迟原因而被保存在缓冲区中。
    当在非阻塞模式下时,如果数据需要写入原始流,但是不使用阻塞又无法接受所有数据时,则会引发BlockingIOError错误。
    该方法返回后,调用者可能会释放或者改变b对象,所以在调用该方法期间,实现部分只能访问对象b
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值