当前位置: 首页 > 面试题库 >

python的内置open()函数中缓冲的用途是什么?

陶和歌
2023-03-14
问题内容

Python说明文件:https :
//docs.python.org/2/library/functions.html#open

open(name[, mode[, buffering]])

上面的文档说:“可选的缓冲参数指定文件所需的缓冲区大小:0表示未缓冲,1表示行缓冲,任何其他正值表示使用(大约)该大小(以字节为单位)的缓冲区。负缓冲表示使用系统默认值。如果省略,则使用系统默认值。”。
当我使用

filedata = open(file.txt,"r",0)

要么

filedata = open(file.txt,"r",1)

要么

filedata = open(file.txt,"r",2)

要么

filedata = open(file.txt,"r",-1)

要么

filedata = open(file.txt,"r")

输出没有变化。上面显示的每一行以相同的速度打印。
输出:

豆先生是15部25-

罗宾·德里斯科尔(Robin Driscoll)撰写并由罗恩·阿特金森(Rowan Atkinson)主演的精彩短片

标题字符。罗宾还写了不同的剧集

Driscoll和Richard Richards,以及Ben Elton的一位。的十三

从1990年1月1日起,飞行员在ITV播出

1995年10月31日,“晚安豆先生”。

豆先生”于1995年12月15日播出,还有一集“

直到2006年才在Nickelodeon播出《伦敦豆先生》。

那么open()函数中的buffering参数如何有用?有什么价值

最好使用哪个缓冲参数


问题答案:

Enabling buffering means that you’re not directly interfacing with the OS’s
representation of a file, or its file system API. Instead, a chunk of data is
read from the raw OS filestream into a buffer until it is consumed, at which
point more data is fetched into the buffer. In terms of the objects you get,
you’ll get a BufferedIOBase object wrapping an underlying RawIOBase (which
represents the raw file stream).

这有什么好处?与原始流进行良好的接口可能会导致较高的延迟,因为操作系统必须摆弄诸如硬盘之类的物理对象,并且在所有情况下这都是不可接受的。假设您想每5毫秒从文件中读取三个字母,并且文件位于硬壳旧硬盘甚至网络文件系统上。与其尝试每隔5毫秒从原始文件流中读取数据,不如将文件中的一堆字节加载到内存中的缓冲区中,然后随意使用它。

选择什么大小的缓冲区将取决于您如何使用数据。对于上面的示例,缓冲区大小为1个字符非常糟糕,三个字符是可以的,并且3个字符的较大倍数不会对用户造成明显的延迟将是理想的。



 类似资料:
  • 本文向大家介绍MySQL SUBSTRING_INDEX()函数的用途是什么?,包括了MySQL SUBSTRING_INDEX()函数的用途是什么?的使用技巧和注意事项,需要的朋友参考一下 MySQL SUBSTRING_INDEX()函数在出现定界符之前从给定字符串返回子字符串。出现次数被指定为其参数。借助于SUBSTRING_INDEX()函数的语法,将会更加理解如下: 语法 这里,  St

  • 正在为以下内容编写javadoc: 但是,将缓冲的输入流传入真的是一个问题吗?因此: 是否将is缓冲到bis中,或者java是否检测到is已缓冲并设置bis=is?如果是,不同的缓冲区大小是否会有所不同?如果没有,为什么不呢<注意:我说的是输入流,但实际上这个问题也适用于输出流

  • 问题内容: 我是Java的新手,这是什么意思?像吗? 如果第二个返回true,将不会执行,对吗? 问题答案: Return语句跳过功能范围的其余执行。 值得读: :http : //docs.oracle.com/javase/tutorial/java/javaOO/returnvalue.html :http : //docs.oracle.com/javase/tutorial/java/n

  • 问题内容: 我编写了一个脚本,该脚本具有多个线程(用创建),该线程从using中获取URL ,然后处理HTML。我是多线程编程的新手,无法理解该函数的用途。 当为空时,它将自动返回异常。所以我不明白每个线程都需要调用该函数。我们知道当队列为空时我们已经完成了队列,所以为什么我们需要通知它工作线程已完成工作(与队列无关,因为他们从队列中获得了URL) ? 有人可以给我提供一个代码示例(理想情况下使用

  • 问题内容: python中有一个类型,但是我不知道该如何使用它。 在Python文档中,描述为: object参数必须是支持缓冲区调用接口的对象(例如字符串,数组和缓冲区)。将创建一个引用该对象参数的新缓冲区对象。缓冲区对象将从对象的开头(或指定的偏移量)开始是一个切片。切片将延伸到对象的末尾(或具有由size参数指定的长度)。 问题答案: 用法示例: 在这种情况下,缓冲区是一个子字符串,从位置6

  • 问题内容: 我是Java的初学者,我想以一种简单的方式知道为什么您应该使用参数化构造函数而不是编译器提供的默认构造函数。 谢谢 问题答案: 默认构造函数将您的对象可能具有的所有属性设置为0,false等。如果要立即设置属性,则可以使用参数化的构造函数。当然,也可以使用您自己的构造函数为您提供在创建对象之前(技术上而言)执行代码的选项。 顺便说一句:“默认值不会为属性设置任何值”的答案是错误的。例如