如何设置文件的缓冲

作者: SmallRookie | 来源:发表于2017-08-17 02:01 被阅读20次
实际案例

将文件内容写入到硬件设备时,使用系统调用,这类I/O操作的时间很长。为了减少I/O操作的次数,文件通常使用缓冲区,当有足够多的数据时才进行系统调用。文件的缓冲行为,分为全缓冲、行缓冲和无缓冲。

那么如何设置Python中文件对象的缓冲行为?

解决方案:

  • 全缓冲:open函数的buffering设置为大于1的整数n,n为缓冲区大小
  • 行缓冲:open函数的buffering设置为1
  • 无缓冲:open函数的buffering设置为0

全缓冲代码如下:

# -*- coding: utf-8 -*-

# 全缓冲
f = open('demo_1.txt', 'w', buffering=1024)

f.write('abc')

注:此处不能调用close(),因为一旦调用该方法,我们不能对文件进行读写操作,进而缓冲区中的数据会在文件读写权限关闭之前将数据写入文件,致使我们设置文件的缓冲的目的失败。

运行上述代码,我们打开demo_1.txt文件查看是否写入数据。不出意外,我们打开该文件是看不到“abc”的这三个字母的。为了验证我们的缓冲区是否设置成功,我们在上述代码的基础上添加如下代码:

f.write("*" * 1021)

我们再运行一下,打开demo_1.txt文件发现仍旧是空文件。我们再来看看代码,现在我们使用了1024B,这时我们只要再写入一个字符,之前缓冲区中的数据就会写入文件。不妨尝试一下,我们继续添加如下代码:

f.write("+")

运行程序并打开demo_1.txt文件,我们发现其内容如下:

abc*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************

这时,我们可以发现在文件内容中并没有我们最后添加的“+”。因此,我们可以断定当我们输入的数据大于缓冲区n的大小时,Python会将缓冲区n大小的数据写入文件中,为后面我们输入的数据腾出空间进行缓存。

行缓冲代码如下:

# 行缓冲
f = open('demo_2.txt', 'w', buffering=1)

f.write("abcd")
f.write("123456")

运行上述代码并打开demo_2.txt文件发现该文件为空文件。既然是行缓冲,我们猜想是不是要换行才会将缓冲区的数据写入文件。因此,我们添加如下代码:

f.write("\n")

这时,我们打开demo_2.txt文件就可以看到我们输入的数据了。

注:行缓冲一般用于“交互式”文本文件,在Windows系统本人未成功实现行缓冲代码功能,但在Linux系统下成功实现行缓冲代码功能。

无缓冲代码如下:

# 无缓冲
f = open('demo_3.txt', 'w', buffering=0)

f.write('abc')

运行程序并打开demo_3.txt文件发现数据已经写入到文件中。

相关文章

  • 如何设置文件的缓冲

    实际案例 将文件内容写入到硬件设备时,使用系统调用,这类I/O操作的时间很长。为了减少I/O操作的次数,文件通常使...

  • Python高效编程(四)

    实际编程和面试都会遇到的典型问题。 如何读写文本文件 如何设置文件的缓冲 如何访问文件的状态 如何使用临时文件 如...

  • OpenGL 视频渲染

    1:所需要的头文件 2:基本设置 3:设置绘制框架的上下文 4:OpenGL 设置 5:设置缓冲区 6:创建缓冲区...

  • FFmpeg - 音频重采样

    音频重采样步骤 创建采样上下文 设置输入缓冲区 设置输出缓冲区 打开文件开始重采样 检查输出缓冲区是否还有残余的样...

  • 5-3 如何设置文件的缓冲

    全缓冲:文件写入磁盘,凑够一个块的大小才写入一次磁盘行缓冲:TTY设备,每输入一行命令,遇到回车符即调用IO无缓冲...

  • 5-3 如何设置文件的缓冲

    实际案例: 将文件内容写入到硬件设备时,使用系统调用,这类I/O操作的时间很长.为了减少I/O操作的次数,文件通常...

  • less 命令

    直接使用语法less [参数] 文件 参数说明: -b <缓冲区大小> 设置缓冲区的大小 -e 当文件显示结束后,...

  • gRPC-Protocol语法指南

    本指南介绍了如何使用协议缓冲区语言来构造协议缓冲区数据(包括.proto文件语法)以及如何从.proto文件生成数...

  • node缓冲区解读

    缓冲区解读 我们主要聊聊以下几个方面的问题: 什么是缓冲区,用来做啥 如何创建缓冲区 访问缓冲区 设置某个字节的数...

  • 从零开始配置 vim(5)——本地设置与全局设置

    本地缓冲区设置与本地窗口设置 我们先以一个例子来说明 我们先注释掉配置文件中显示行号的设置,然后随机打开一个文件例...

网友评论

    本文标题:如何设置文件的缓冲

    本文链接:https://www.haomeiwen.com/subject/xmdxrxtx.html