golang 文件

golang 文件

概念

文件是计算机系统中用于存储和管理的 数据集合,具有唯一的名称,存在于存储介质上,包含创建、修改等属性,通过文件系统进行组织,用户可进行读取、写入等操作

文件流

文件输入流(InputStream)

  • 定义:文件输入流是从文件到程序的 数据传输路径。
  • 用途:用于从文件中读取数据
  • 操作:包括打开文件、读取数据、关闭文件等
  • 类型:可以是字节流(读取字节)或字符流(读取字符)

文件输出流(OutputStream)

  • 定义:文件输出流是从程序到文件的数据传输路径
  • 用途:用于将数据写入到文件
  • 操作:包括打开文件、写入数据、关闭文件等
  • 类型:同样可以是字节流(写入字节)或字符流(写入字符)

文件流的特性

  • 顺序性:文件流中的数据是按顺序读取或写入的,通常从文件的开始到结束

  • 缓冲区:文件流通常会使用缓冲区来提高数据传输的效率

  • 状态管理:文件流需要管理其状态,如当前位置、是否已到达文件末尾等

  • 异常处理:文件流操作可能会抛出异常,如文件不存在、权限不足、磁盘空间不足等

type File

type File struct {// 内含隐藏或非导出字段
}

File代表一个打开的文件对象

os.File 类型实现了多个接口,使得 os.File 对象可以用于文件的读取和写入操作。os.File 类型提供了一组用于操作文件的方法。这些方法可以分为几个主要类别:文件属性查询、文件操作(如读写)、文件位置调整、文件系统操作等

文件创建与打开

func Create(name string) (file *File, err error)

作用:创建一个新文件。如果文件已存在,它会将文件截断到0长度

参数:

  • name: 要创建的文件的名称

返回值:

  • file: 指向新创建的文件的指针
  • err: 可能发生的错误

示例:

file, err := os.Create("example.txt")
if err != nil {fmt.Println("Error creating file:", err)return
}
defer file.Close() // 确保在函数结束时关闭文件

func Open(name string) (file *File, err error)

作用:打开一个已存在的文件用于读取

参数:

  • name: 要打开的文件的名称

返回值:

  • file: 指向打开的文件的指针

  • err: 可能发生的错误

示例:

file, err := os.Open("example.txt")
if err != nil {fmt.Println("Error opening file:", err)return
}
defer file.Close() // 确保在函数结束时关闭文件

func OpenFile(name string, flag int, perm FileMode) (file *File, err error)

作用:根据指定的标志和权限打开或创建一个文件

参数:

  • name: 要打开或创建的文件的名称
  • flag: 文件打开的模式,如os.O_RDONLYos.O_WRONLYos.O_CREATE
const (O_RDONLY int = syscall.O_RDONLY // 只读模式打开文件O_WRONLY int = syscall.O_WRONLY // 只写模式打开文件O_RDWR   int = syscall.O_RDWR   // 读写模式打开文件O_APPEND int = syscall.O_APPEND // 写操作时将数据附加到文件尾部O_CREATE int = syscall.O_CREAT  // 如果不存在将创建一个新文件O_EXCL   int = syscall.O_EXCL   // 和O_CREATE配合使用,文件必须不存在O_SYNC   int = syscall.O_SYNC   // 打开文件用于同步I/OO_TRUNC  int = syscall.O_TRUNC  // 如果可能,打开时清空文件
)
  • perm: 文件的模式和权限位
    type FileMode
    type FileMode uint32
    FileMode代表文件的模式和权限位。这些字位在所有的操作系统都有相同的含义,因此文件的信息可以在不同的操作系统之间安全的移植。不是所有的位都能用于所有的系统,唯一共有的是用于表示目录的ModeDir位。
const (// 单字符是被String方法用于格式化的属性缩写。ModeDir        FileMode = 1 << (32 - 1 - iota) // d: 目录ModeAppend                                     // a: 只能写入,且只能写入到末尾ModeExclusive                                  // l: 用于执行ModeTemporary                                  // T: 临时文件(非备份文件)ModeSymlink                                    // L: 符号链接(不是快捷方式文件)ModeDevice                                     // D: 设备ModeNamedPipe                                  // p: 命名管道(FIFO)ModeSocket                                     // S: Unix域socketModeSetuid                                     // u: 表示文件具有其创建者用户id权限ModeSetgid                                     // g: 表示文件具有其创建者组id的权限ModeCharDevice                                 // c: 字符设备,需已设置ModeDeviceModeSticky                                     // t: 只有root/创建者能删除/移动文件// 覆盖所有类型位(用于通过&获取类型位),对普通文件,所有这些位都不应被设置ModeType = ModeDir | ModeSymlink | ModeNamedPipe | ModeSocket | ModeDeviceModePerm FileMode = 0777 // 覆盖所有Unix权限位(用于通过&获取类型位)
)

返回值:

  • file: 指向打开或创建的文件的指针
  • err: 可能发生的错误

示例:

file, err := os.OpenFile("example.txt", os.O_RDWR|os.O_CREATE, 0644)
if err != nil {fmt.Println("Error opening file:", err)return
}
defer file.Close() // 确保在函数结束时关闭文件

func NewFile(fd uintptr, name string) *File

作用:根据文件描述符和名称创建一个新的File对象

参数:

  • fd: 文件描述符
  • name: 文件名

返回值:

  • 返回一个指向新File对象的指针

示例:

fd := os.Open("example.txt")
file := os.NewFile(fd.Fd(), "example.txt")
defer file.Close() // 确保在函数结束时关闭文件

func Pipe() (r *File, w *File, err error)

作用:创建一个管道并返回一对文件对象,分别用于读取和写入

返回值

  • r: 用于读取管道的文件对象
  • w: 用于写入管道的文件对象
  • err: 可能发生的错误

示例:

r, w, err := os.Pipe()
if err != nil {fmt.Println("Error creating pipe:", err)return
}
defer r.Close() // 确保在函数结束时关闭管道读取端
defer w.Close() // 确保在函数结束时关闭管道写入端

文件属性查询

func (f *File) Name() string

作用:返回文件的名称

返回值

  • string返回一个字符串,表示文件的名称

示例:

file, err := os.Open("example.txt")
if err != nil {fmt.Println("Error opening file:", err)return
}
defer file.Close() // 确保在函数结束时关闭文件name := file.Name()
fmt.Println("File name:", name)

func (f *File) Stat() (fi FileInfo, err error)

作用:获取文件的状态信息,包括文件大小、创建时间、修改时间、访问时间等

返回值:

  • fi: 一个FileInfo类型的结构体,包含文件的状态信息,如大小、创建时间、修改时间等
  • err: 如果在获取文件状态信息时发生错误,返回一个错误
file, err := os.Open("example.txt")
if err != nil {fmt.Println("Error opening file:", err)return
}
defer file.Close() // 确保在函数结束时关闭文件fileInfo, err := file.Stat()
if err != nil {fmt.Println("Error getting file info:", err)return
}
fmt.Println("File size:", fileInfo.Size())

func (f *File) Fd() uintptr

作用:返回文件的描述符

返回值

  • 返回一个uintptr类型的值,表示文件的描述符。在Unix系统中,这个描述符可以用于执行一些底层的文件操作
file, err := os.Open("example.txt")
if err != nil {fmt.Println("Error opening file:", err)return
}
defer file.Close() // 确保在函数结束时关闭文件fd := file.Fd()
fmt.Println("File descriptor:", fd)

目录操作

func (f *File) Readdir(n int) (fi []FileInfo, err error)

作用:读取目录内容,返回文件信息列表

输入值:

  • n: 可选参数,指定返回的文件信息列表的最大长度。如果为0,将返回所有文件信息

返回值:

  • fi: 一个[]FileInfo类型的切片,包含目录中的文件信息

  • err: 如果在读取目录内容时发生错误,返回一个错误值

示例:

// 使用Readdir方法读取目录内容并打印文件信息
func printDirectoryInfo(dirName string) {dir, err := os.Open(dirName)if err != nil {fmt.Println("Error opening directory:", err)return}defer dir.Close() // 确保在函数结束时关闭目录// 读取目录内容,返回文件信息列表dirFiles, err := dir.Readdir(0)if err != nil {fmt.Println("Error reading directory:", err)return}for _, f := range dirFiles {fmt.Println("File:", f.Name(), "Size:", f.Size(), "Mode:", f.Mode(), "ModTime:", f.ModTime())}
}

func (f *File) Readdirnames(n int) (names []string, err error)

作用:读取目录内容,返回文件名列表
输入值:

  • n: 可选参数,指定返回的文件名列表的最大长度。如果为0,将返回所有文件名

返回值:

  • names: 一个[]string类型的切片,包含目录中的文件名

  • err: 如果在读取目录内容时发生错误,返回一个错误值

示例:

// 使用Readdirnames方法读取目录内容并打印文件名
func printDirectoryNames(dirName string) {dir, err := os.Open(dirName)if err != nil {fmt.Println("Error opening directory:", err)return}defer dir.Close() // 确保在函数结束时关闭目录// 读取目录内容,返回文件名列表dirNames, err := dir.Readdirnames(0)if err != nil {fmt.Println("Error reading directory names:", err)return}for _, name := range dirNames {fmt.Println("File name:", name)}
}

文件内容操作

func (f *File) Read(b []byte) (n int, err error)

作用:从文件中读取数据

输入值:

  • b: 一个字节切片,用于存储从文件中读取的数据

返回值:

  • n: 实际读取的字节数

  • err: 如果读取操作失败,返回一个错误值*

示例:

func main() {// 打开一个已存在的文件用于读取file, err := os.Open("example.txt")if err != nil {fmt.Println("Error opening file:", err)return}defer file.Close() // 确保在函数结束时关闭文件// 创建一个足够大的缓冲区来存储读取的数据buffer := make([]byte, 100)// 从文件中读取数据n, err := file.Read(buffer)if err != nil {fmt.Println("Error reading file:", err)return}// 打印读取到的数据fmt.Println("Read ", n, " bytes:", string(buffer))
}

func (f *File) ReadAt(b []byte, off int64) (n int, err error)

作用:从文件的指定偏移量读取数据

输入值:

  • b: 一个字节切片,用于存储从文件中读取的数据

  • off: 起始偏移量,表示从文件中的哪个位置开始读取

返回值:

  • n: 实际读取的字节数

  • err: 如果读取操作失败,返回一个错误值

示例:

func main() {// 打开一个已存在的文件用于读取file, err := os.Open("example.txt")if err != nil {fmt.Println("Error opening file:", err)return}defer file.Close() // 确保在函数结束时关闭文件// 创建一个足够大的缓冲区来存储读取的数据buffer := make([]byte, 100)// 从文件的指定偏移量读取数据n, err := file.ReadAt(buffer, 50)if err != nil {fmt.Println("Error reading file:", err)return}// 打印读取到的数据fmt.Println("Read ", n, " bytes at offset 50:", string(buffer))
}

func (f *File) Write(b []byte) (n int, err error)

作用:将数据写入文件

输入值:

  • b: 一个字节切片,包含要写入文件的数据

返回值:

  • n: 实际写入的字节数

  • err: 如果写入操作失败,返回一个错误值

示例:

func main() {// 打开一个已存在的文件用于写入file, err := os.Open("example.txt", os.O_RDWR)if err != nil {fmt.Println("Error opening file:", err)return}defer file.Close() // 确保在函数结束时关闭文件// 将数据写入文件n, err := file.Write([]byte("Hello, World!"))if err != nil {fmt.Println("Error writing to file:", err)return}// 打印写入的字节数fmt.Println("Wrote ", n, " bytes to file")
}

func (f *File) WriteString(s string) (ret int, err error)

作用:将字符串写入文件。

输入值:

  • s: 要写入的字符串。

返回值:

  • ret: 实际写入的字节数。

  • err: 如果写入操作失败,返回一个错误值。

示例:

func main() {// 打开一个已存在的文件用于写入file, err := os.Open("example.txt", os.O_RDWR)if err != nil {fmt.Println("Error opening file:", err)return}defer file.Close() // 确保在函数结束时关闭文件// 将字符串写入文件n, err := file.WriteString("Hello, World!")if err != nil {fmt.Println("Error writing to file:", err)return}// 打印写入的字节数fmt.Println("Wrote ", n, " bytes to file")
}

func (f *File) WriteAt(b []byte, off int64) (n int, err error)

作用:将数据写入文件的指定偏移量。

输入值:

  • b: 一个字节切片,包含要写入文件的数据。

  • off: 起始偏移量,表示从文件中的哪个位置开始写入

返回值:

  • n: 实际写入的字节数

  • err: 如果写入操作失败,返回一个错误值

示例:

func main() {// 打开一个已存在的文件用于写入file, err := os.Open("example.txt", os.O_RDWR)if err != nil {fmt.Println("Error opening file:", err)return}defer file.Close() // 确保在函数结束时关闭文件// 将数据写入文件的指定偏移量n, err := file.WriteAt([]byte("Hello, World!"), 50)if err != nil {fmt.Println("Error writing to file:", err)return}// 打印写入的字节数fmt.Println("Wrote ", n, " bytes to file at offset 50")
}

文件位置调整

func (f *File) Seek(offset int64, whence int) (ret int64, err error)

作用:移动文件指针到一个新的位置

输入值:

  • offset: 偏移量,表示从当前文件指针的位置移动多少字节

  • whence : 参考点,用于解释offset的值。可能的值包括:

    • io.SeekStart: 从文件开始处计算偏移量

    • io.SeekCurrent: 从当前文件指针的位置计算偏移量

    • io.SeekEnd: 从文件末尾处计算偏移量

返回值:

  • ret: 返回新的文件指针位置。
  • err: 如果移动文件指针时发生错误,返回一个错误值。

示例:

func main() {// 打开一个已存在的文件file, err := os.Open("example.txt")if err != nil {fmt.Println("Error opening file:", err)return}defer file.Close() // 确保在函数结束时关闭文件// 将文件指针移动到文件末尾_, err = file.Seek(0, io.SeekEnd)if err != nil {fmt.Println("Error seeking file:", err)return}// 写入一些内容到文件末尾_, err = file.WriteString("Hello, World!")if err != nil {fmt.Println("Error writing to file:", err)return}// 强制将所有未写入的数据写入磁盘err = file.Sync()if err != nil {fmt.Println("Error syncing file:", err)return}fmt.Println("Content written to the end of the file")
}

文件系统操作

func (f *File) Chdir() error

作用:更改当前工作目录到文件所在的目录

返回值:

  • err: 如果更改当前工作目录时发生错误,返回一个错误值

示例:

func main() {// 打开一个已存在的文件file, err := os.Open("example.txt")if err != nil {fmt.Println("Error opening file:", err)return}defer file.Close() // 确保在函数结束时关闭文件// 更改当前工作目录到文件所在的目录err = file.Chdir()if err != nil {fmt.Println("Error changing directory:", err)return}// 当前工作目录已更改,可以继续操作文件系统fmt.Println("Current working directory changed to file's directory")
}

func (f *File) Chmod(mode FileMode) error

作用:更改文件的权限模式。

输入值:

  • mode: 一个新的权限模式,是一个FileMode类型的值。

返回值:

  • err: 如果更改文件权限时发生错误,返回一个错误值。

示例:

func main() {// 打开一个已存在的文件file, err := os.Open("example.txt")if err != nil {fmt.Println("Error opening file:", err)return}defer file.Close() // 确保在函数结束时关闭文件// 更改文件的权限模式err = file.Chmod(0644)if err != nil {fmt.Println("Error changing file mode:", err)return}// 文件权限已更改fmt.Println("File mode changed to 0644")
}

func (f *File) Chown(uid, gid int) error

作用:更改文件的所有者和组。

输入值:

  • uid: 新的文件所有者的用户ID。
  • gid: 新的文件所有者的组ID。

返回值:

  • err: 如果更改文件所有者和组时发生错误,返回一个错误值。

示例:

func main() {// 打开一个已存在的文件file, err := os.Open("example.txt")if err != nil {fmt.Println("Error opening file:", err)return}defer file.Close() // 确保在函数结束时关闭文件// 更改文件的所有者和组err = file.Chown(1000, 1000)if err != nil {fmt.Println("Error changing file ownership:", err)return}// 文件所有者和组已更改fmt.Println("File ownership changed to user 1000 and group 1000")
}

func (f *File) Truncate(size int64) error

作用:截断文件到指定大小。

输入值:

  • size: 新的文件大小,以字节为单位。

返回值:

  • err: 如果截断文件时发生错误,返回一个错误值。

示例:

func main() {// 打开一个已存在的文件file, err := os.Open("example.txt")if err != nil {fmt.Println("Error opening file:", err)return}defer file.Close() // 确保在函数结束时关闭文件// 截断文件到指定大小err = file.Truncate(50)if err != nil {fmt.Println("Error truncating file:", err)return}// 文件已截断到指定大小fmt.Println("File truncated to 50 bytes")
}

文件同步和关闭

func (f *File) Sync() (err error)

作用:强制将所有未写入的数据写入磁盘。

返回值:

  • err: 如果写入操作失败,返回一个错误值。

示例:

func main() {// 打开一个已存在的文件file, err := os.Open("example.txt", os.O_RDWR)if err != nil {fmt.Println("Error opening file:", err)return}defer file.Close() // 确保在函数结束时关闭文件// 将一些内容写入文件_, err = file.Write([]byte("Hello, World!"))if err != nil {fmt.Println("Error writing to file:", err)return}// 强制将所有未写入的数据写入磁盘err = file.Sync()if err != nil {fmt.Println("Error syncing file:", err)return}fmt.Println("Content written to the file and synced")
}

func (f *File) Close() error

作用:关闭文件,释放资源。

返回值:

  • err: 如果关闭文件时发生错误,返回一个错误值。

示例:

func main() {// 打开一个已存在的文件file, err := os.Open("example.txt")if err != nil {fmt.Println("Error opening file:", err)return}// 对文件进行操作...// 关闭文件err = file.Close()if err != nil {fmt.Println("Error closing file:", err)return}fmt.Println("File closed successfully")
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/50033.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux进程控制——进程等待

文章目录 进程等待进程等待的必要性进程等待的方法status参数option参数 进程等待 进程等待的过程其实是父进程等待子进程死亡的过程 进程等待的必要性 如果子进程退出&#xff0c;父进程不进行处理&#xff0c;子进程会变成僵尸进程&#xff0c;有内存泄漏的风险 僵尸进程…

Adobe Acrobat Pro DC for Mac:PDF处理软件

Adobe Acrobat Pro DC for Mac是一款专为Mac用户设计的PDF处理软件&#xff0c;它凭借出色的功能和卓越的性能&#xff0c;成为了处理PDF文件的理想选择。 首先&#xff0c;Acrobat Pro DC for Mac支持全方位的PDF编辑。用户可以对PDF文档进行文本编辑、图像处理、表格制作等操…

Paddlenlp测试

1、环境安装 使用华为云euleros操作系统&#xff0c;python版本3.9.5&#xff0c;CPU无GPU服务器&#xff1a; &#xff08;1&#xff09;pip3 install setuptools_scm -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com &#xff08;2&#xf…

机器学习算法与Python实战 | 两行代码即可应用 40 个机器学习模型--lazypredict 库!

本文来源公众号“机器学习算法与Python实战”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;两行代码即可应用 40 个机器学习模型 今天和大家一起学习使用 lazypredict 库&#xff0c;我们可以用一行代码在我们的数据集上实现许多…

雪花算法及MP实现方式

根据当前项目推进的情况&#xff0c;我们会发现用户注册时&#xff0c;从来没有考虑主键生成的问题。为什么呢&#xff1f;因为咱们的数据表现在都是通过数据库自增长方式获取主键id的。不过&#xff0c;这个主键自增长的方案好不好呢&#xff1f;我们一起来了解一下程序发展的…

SNP过滤

SNP过滤 文章目录 SNP过滤前言一. 利用Perl脚本get_vcf_stats.pl统计位点信息二. 利用R脚本149toTZC.2allele.filtered.R画图并获得过滤后的位点位置信息三. 用vcftools保留过滤后的位点四、get_vcf_stats.pl 脚本存放处 总结 SNP过滤 所属目录&#xff1a;紫菜创建时间&#…

如何查找下载安装安卓APK历史版本?

在安卓设备上&#xff0c;有时候我们可能希望安装某个软件的旧版本&#xff0c;可能是因为新版本不兼容、功能改变不符合需求或是其他原因。 安卓系统并不像iOS那样提供直观的历史版本下载界面。 不过&#xff0c;通过一些第三方市场和网站&#xff0c;我们仍然可以找到并安装…

docker环境下的verdaccio设置权限并配置域名.md

权限配置 一个管理员叫admin,可以读也可以发布一个普通用户叫qiuye,只可以读,不可以发布添加账号就自行创建添加即可,只需要更改config文件的配置项即可 packages:*/*: access: admin qiuyepublish: admin unpublish: admin **:access: admin qiuyepublish: admin unpublish…

Linux——CPU占不上去的解决办法

一、将调节器升至performance&#xff1a; 1.1 查看当前的调节器&#xff1a; cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor如果不是 performance &#xff0c;则进入root账户 1.2 进入root账户 先进入管理员账户输入命令&#xff1a; su root如果没有roo…

【小程序爬虫入门实战】使用Python爬取易题库

文章目录 1. 写在前面2. 抓包分析 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python与爬虫领域研…

iPhone 在 App Store 中推出的 PC 模拟器 UTM SE

PC 模拟器是什么&#xff1f;PC 模拟器是一种软件工具&#xff0c;它模拟不同硬件或操作系统环境&#xff0c;使得用户可以在一台 PC 上运行其他平台的应用程序或操作系统。通过 PC 模拟器&#xff0c;用户可以在 Windows 电脑上体验 Android 应用、在 Mac 电脑上运行 Windows …

科普文:详解 JuiceFS 读性能:预读、预取、缓存、FUSE 和对象存储

在高性能计算场景中&#xff0c;往往采用全闪存架构和内核态并行文件系统&#xff0c;以满足性能要求。随着数据规模的增加和分布式系统集群规模的增加&#xff0c;全闪存的高成本和内核客户端的运维复杂性成为主要挑战。 JuiceFS&#xff0c;是一款全用户态的云原生分布式文件…

SQL优化相关

文章目录 SQL优化1. 数据插入2. 主键优化页分裂页合并索引设计原则 3. order by 优化4. group by 优化5. limit优化6. count优化7. update 优化 SQL优化 1. 数据插入 当我们需要插入多条数据时候&#xff0c;建议使用批量插入&#xff0c;因为每次插入数据都会执行一条SQL&am…

【Linux】多线程4——线程同步/条件变量

1.Linux线程同步 1.1.同步概念与线程饥饿问题 先来理解同步的概念 什么是线程同步 在一般情况下&#xff0c;创建一个线程是不能提高程序的执行效率的&#xff0c;所以要创建多个线程。但是多个线程同时运行的时候可能调用线程函数&#xff0c;在多个线程同时对同一个内存地…

centos stream 9安装 Kubernetes v1.30 集群

1、版本说明&#xff1a; 系统版本&#xff1a;centos stream 9 Kubernetes版本&#xff1a;最新版(v1.30) docker版本&#xff1a;27.1.1 节点主机名ip主节点k8s-master172.31.0.10节点1k8s-node1172.31.0.11节点2k8s-node2172.31.0.12 2、首先&#xff0c;使用Vagrant和Virt…

前端缓存问题(浏览器缓存和http缓存)- 解决办法

问题描述&#xff1a;前端代码更新&#xff0c;但因浏览器缓存问题&#xff0c;导致页面源代码并未更新 查看页面源代码的方法&#xff1a;鼠标右键&#xff0c;点击查看页面源代码 如图&#xff1a; 解决方法&#xff1a; 注&#xff1a;每执行一步&#xff0c;就检查一下浏览…

string indices must be integers

string indices must be integers 目录 string indices must be integers 【常见模块错误】 【解决方案】 常见原因及解决方法 具体案例分析 总结 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出…

Java1.1标准之重要特性及用法实例(十二)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列…

kafka高性能的底层原理分析

目录 1.磁盘顺序写 2.零拷贝 3.数据压缩 4.消息批量处理 5.pageCache 6.稀疏索引 总结 Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff0c;它可以处理消费者在网站中的所有动作流数据。那么他是如何做到高性能的呢&#xff0c;本篇文章从宏观上分析一下&#xff…

C++——初识模板

前言 模板是C中的重大板块&#xff0c;是使C真正超越C语言的工具&#xff0c;在C模板没有设计出来之前其实C是没有那么被行业和社会所认可的&#xff0c;本节我们将初步了解C中的模板&#xff08;仅作大致讲解&#xff0c;具体的细枝末节将会再过几节讲解&#xff09;&#xf…