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

What is the use of buffering in python's built-in open() function?

Python文档:http:/ / / 2 /图书馆/ functions.html docs.python.org #开放

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

上面的文档应该提醒说"可选参数文件缓冲的缓冲所需的缓冲区大小:0均值,均值线1具有积极的价值,任何其他使用一个缓冲的均值(约),大小(字节)。a负均值使用默认缓冲系统。如果omitted,系统默认是"。当我使用

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

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

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

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

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

输出没有变化。每一行显示在上面的印刷速度。输出:

Mr. Bean is a British television programme series of fifteen 25-

minute episodes written by Robin Driscoll and starring Rowan Atkinson
as

the title character. Different episodes were also written by Robin

Driscoll and Richard Curtis, and one by Ben Elton. Thirteen of the

episodes were broadcast on ITV, from the pilot on 1 January 1990,
until

"Goodnight Mr. Bean" on 31 October 1995. A clip show,"The Best Bits
of

Mr. Bean", was broadcast on 15 December 1995, and one episode,"Hair
by

Mr. Bean of London", was not broadcast until 2006 on
Nickelodeon.

那么如何在缓冲参数open()函数是有用的?什么价值

(这是最好的缓冲参数的使用?


启用缓冲意味着您没有直接与操作系统的文件表示或其文件系统API接口。相反,只有一块数据从原始OS文件流读取到缓冲区中,直到它被使用为止,此时更多的数据将被提取到缓冲区中。对于您得到的对象,您将得到一个BufferedIOBase对象,该对象包装一个底层RawIOBase(表示原始文件流)。

这有什么好处?与原始流的良好接口可能具有很高的延迟,因为操作系统必须与硬盘等物理对象进行混淆,在许多情况下可能不适用。假设您想每5毫秒从一个文件中读取三个字母,并且您的文件位于硬壳旧硬盘上,甚至是网络文件系统上。与其尝试每隔5毫秒从原始文件流中读取一次,不如将一组文件加载到内存中的缓冲区中,然后随意使用它。

您选择的缓冲区大小将取决于您使用数据的方式。对于上面的示例,1个字符的缓冲区大小将非常糟糕,3个字符也可以,任何3个字符的大倍数都不会对用户造成明显的延迟,这是理想的。


您还可以通过从IO模块调用只读默认缓冲区大小属性来检查默认缓冲区大小。

1
2
import io
print (io.DEFAULT_BUFFER_SIZE)