文件:文本文件和二进制文件 详解

news2024/11/24 15:07:39

目录

  • 0 引言
  • 1 文本文件
    • 1.1 是如何存储的?
    • 1.2 文件拓展名
  • 2 二进制文件
    • 2.1 是如何存储的?
    • 2.2 分类
      • 2.2.1 图像文件
      • 2.2.2 音频文件
      • 2.2.3 视频文件
      • 2.2.4 可执行文件

请添加图片描述

  • 🙋‍♂️ 作者:海码007
  • 📜 专栏:C++专栏
  • 💥 标题:文件:文本文件和二进制文件 详解
  • ❣️ 寄语:人生的意义或许可以发挥自己全部的潜力,所以加油吧!
  • 🎈 最后:文章作者技术和水平有限,如果文中出现错误,希望大家能指正

0 引言

文件作为最基础的计算机知识,无时无刻都在使用,但是很少有详细文件的。今天就展开讲一讲电脑中的文件,大致可以分为文本文件和二进制文件。

1 文本文件

1.1 是如何存储的?

在计算机中,文本文件的存储涉及将字符转换为字节序列并存储在文件系统中。以下是这一过程的关键步骤和概念:

  1. 字符编码

    • 计算机使用字符编码将文本字符(如字母、数字、符号)转换为字节(即 0 和 1 的序列)。最常用的编码包括 ASCII、UTF-8、UTF-16 等。
    • ASCII 编码只适用于英文字符和基本符号,每个字符占用一个字节(8位)。
    • UTF-8 是一种可变长度的 Unicode 编码,它可以表示世界上几乎所有的字符。英文字符在 UTF-8 中仍然占用一个字节,而其他字符(如中文、阿拉伯文、表情符号)可能占用多个字节。
  2. 文件系统

    • 文件系统管理存储设备(如硬盘驱动器、固态驱动器)上的数据,包括文件的创建、读取、写入和删除。
    • 当文本文件被保存时,它被写入存储设备上的文件系统。文件系统会为该文件分配空间,并将字节序列存储在这些空间中。
  3. 文件属性

    • 除了文件内容本身,文件系统还存储有关文件的元数据,如文件名、创建时间、修改时间、文件大小等。
  4. 行终止符

    • 不同操作系统使用不同的行终止符来表示行的结束。
      • Windows 使用回车符和换行符(CRLF,\r\n
      • 而 Unix/Linux 使用单个换行符(LF,\n)。
    • 当文本文件在不同的操作系统之间传输时,可能需要转换行终止符。
  5. 存储介质

    • 最终,这些字节被物理地存储在存储介质上,如硬盘、固态硬盘或可移动驱动器。
    • 存储介质上的磁性或电子元件会根据文件的字节序列相应地改变状态,以存储数据。
  6. 文件访问

    • 当需要访问文件时,文件系统会根据文件的存储位置读取字节序列,然后操作系统或应用程序根据相应的字符编码将这些字节转换回字符,以便于显示或处理。

总之,文本文件在计算机中的存储涉及字符到字节的编码转换,以及这些字节在文件系统上的物理存储。这个过程使得文本数据可以被持久化存储,并在需要时进行检索和使用。

1.2 文件拓展名

电脑中的文本文件种类繁多,涵盖了从简单的笔记到复杂的代码和配置文件。以下是一些常见类型的文本文件:

  1. 普通文本文件

    • .txt:最基本的文本文件,不含格式化,可用任何文本编辑器打开。
  2. 编程语言源代码文件

    • .py:Python 源代码文件。
    • .java:Java 源代码文件。
    • .c/.cpp:C 或 C++ 源代码文件。
    • .js:JavaScript 文件。
    • .html/.css:用于网页设计的 HTML 和 CSS 文件。
  3. 配置文件

    • .json:JSON 格式的配置文件,常用于网络通信和数据存储。
    • .xml:XML 格式的文件,用于数据存储和配置。
    • .ini:简单的配置文件,包含键值对。
    • .yaml/.yml:YAML 格式的配置文件,常用于配置管理和数据序列化。
  4. 脚本文件

    • .sh:Shell 脚本文件,用于自动化命令。
    • .bat:Windows 批处理文件。
  5. 数据文件

    • .csv:逗号分隔值文件,常用于存储表格数据。
    • .log:日志文件,记录应用程序或系统的操作历史。
  6. 文档和标记语言文件

    • .md:Markdown 文件,用于编写格式化文档。
    • .tex:LaTeX 文件,用于复杂文档的排版。
  7. 其他特定用途文件

    • .htaccess:用于配置 Web 服务器的文件。
    • .gitignore:Git 版本控制系统用来指定忽略的文件或文件夹。

这些文本文件在不同的领域和应用中扮演着重要的角色,从简单的信息记录到复杂的程序设计和系统配置。由于它们通常是以纯文本形式存储的,因此可以使用各种文本编辑器轻松查看和修改。

2 二进制文件

2.1 是如何存储的?

在计算机中,二进制文件的存储过程与文本文件类似,但二进制文件包含的是不限于文本字符的字节序列。这些文件通常包含用于特定应用的编码数据,如图像、音频、视频或可执行程序。以下是二进制文件存储的关键步骤和概念:

  1. 数据编码

    • 二进制文件将数据以二进制形式编码。这些数据可以代表任何内容,从图像的像素到音频的波形,或者是程序的机器码。
    • 不同类型的二进制文件有不同的内部结构和编码方式。例如,图像文件(如 JPEG)将包含与图像格式相关的元数据和像素数据,而音频文件(如 MP3)将包含音频编码数据。
  2. 文件格式

    • 每种类型的二进制文件通常都遵循特定的格式或协议,定义了如何解释其中的数据。
    • 文件格式既指定了数据的组织方式,也定义了必要的元数据,如文件头信息,它描述了文件的内容和结构。
  3. 文件系统

    • 二进制文件被存储在文件系统中,该系统管理存储设备(如硬盘、SSD)上的数据。
    • 文件系统负责分配空间来存储文件的二进制数据,并跟踪文件的位置、大小、创建时间等元数据。
  4. 字节序列存储

    • 二进制文件的内容作为字节序列存储在存储介质上。这些字节可以表示任何形式的数据,不仅限于文本字符。
  5. 存储介质

    • 二进制文件的字节序列物理存储在各种类型的存储介质上,如硬盘、固态驱动器、USB 驱动器等。
    • 存储介质使用磁性、电子或其他技术来持久化地存储数据。
  6. 访问和解释

    • 读取二进制文件时,必须使用理解特定文件格式的程序来正确解释文件内容。
    • 例如,图像查看器能解释图像文件格式,音频播放器能解释音频文件格式。

总结来说,二进制文件在计算机中以字节序列的形式存储,这些序列代表各种类型的数据。每种二进制文件格式都有其特定的结构和编码方式,而正确的应用程序能够解析和处理这些文件中的数据。

2.2 分类

2.2.1 图像文件

二进制图像文件格式有许多种,各自有独特的数据组织方式,反映了它们的设计目的和使用场景。下面是一些常见图像格式的组织结构概述:

  1. JPEG

    • 采用有损压缩技术。
    • 文件开始于一个标记,指明文件类型(SOI)。
    • 后跟一系列段(segments),包括量化表、霍夫曼编码表、帧数据(定义图像大小和颜色编码方式)和扫描数据(实际图像数据)。
    • 支持不同程度的压缩,压缩更高会丢失更多细节。
  2. PNG

    • 采用无损压缩技术。
    • 文件以 8 字节的签名开始,用于检测文件类型。
    • 主要由一系列块(chunks)组成,包括头块(定义图像的基本属性如宽度、高度、颜色深度)、数据块(图像数据)和结束块。
    • 支持透明度和颜色管理。
  3. GIF

    • 采用 LZW 无损压缩算法。
    • 文件开始于一个逻辑屏幕描述符,包含全局颜色表和画布大小。
    • 包含一个或多个图像块(每个都有自己的局部颜色表),以及可能的动画控制块。
    • 每个图像块可以包含多帧,用于动画。
  4. BMP

    • 文件头包含文件类型、大小和图像数据起始位置。
    • 位图信息头定义图像的尺寸、颜色深度和压缩类型。
    • 跟随的是颜色表和实际的像素数据。
    • 文件通常较大,因为它们不使用压缩。
  5. TIFF

    • 由多个带标签的图像文件目录(IFD)组成,每个目录定义一个图像。
    • 每个 IFD 包含图像数据及其元数据的条目。
    • 支持各种类型的压缩和多页图像。
  6. RAW

    • 包含从摄像机传感器直接获取的未经处理的数据。
    • 通常包括元数据,如曝光、白平衡设置。
    • 文件结构取决于具体的摄像机制造商和型号。
  7. WebP

    • 由 RIFF(Resource Interchange File Format)容器格式支持。
    • 包含 WebP 数据块,该数据块包含实际的图像数据。
    • 支持有损和无损压缩。
  8. SVG

    • 基于 XML,文件包含用于描述图形的标记。
    • 图形元素和属性以文本形式表示。
    • 可以包含嵌入的光栅图像和用于互动性和动画的脚本。
  9. HEIF

    • 基于 ISO 基础媒体文件格式(ISOBMFF)。
    • 包括图像数据和元数据,支持图像序列(如实时照片)。
    • 通常使用高效率视频编码(HEVC)压缩技术。
  10. PSD

    • Adobe Photoshop 的专有格式。
    • 包含图层、蒙版、透明度、文本、通道等多种数据类型。
    • 支持复杂的图像编辑和保存未完成的工作状态。

这些格式的设计反映了它们的用途,从高效的网络传输(如 JPEG、WebP)到复杂的图像编辑(如 PSD、TIFF)不等。

2.2.2 音频文件

二进制音频文件格式多种多样,每种格式都有其特定的数据组织方式,这些方式反映了不同的设计目标,如音质保真度、文件大小和兼容性。以下是一些常见的二进制音频文件格式及其组织结构:

  1. MP3 (MPEG Audio Layer III)

    • 采用有损压缩,通过删除人耳难以察觉的音频部分来减小文件大小。
    • 文件由一系列独立的帧组成,每帧包含音频数据和一个头部,头部包含帧的长度、位率和编码信息。
    • 支持元数据标签,如 ID3,用于存储歌曲信息。
  2. WAV (Waveform Audio File Format)

    • 无损格式,通常用于存储未压缩的音频数据。
    • 文件包含一个头部,定义音频格式、采样率、位深度和通道数。
    • 后跟音频数据,直接表示声波的振幅。
  3. AAC (Advanced Audio Coding)

    • 与 MP3 类似,是一种有损压缩格式,但提供比 MP3 更高效的压缩和更好的音质。
    • 用于 iTunes 和 Apple Music。
    • 文件结构包括音频数据和可选的元数据。
  4. FLAC (Free Lossless Audio Codec)

    • 无损压缩,保留原始音频数据的完整性。
    • 文件结构包括元数据块(如流信息、注释头部)和一系列音频帧,每个帧都包含音频数据和校验信息。
  5. OGG Vorbis

    • 一种开源的有损压缩格式,旨在提供高效的流媒体。
    • 文件由一系列位于 Ogg 容器中的 Vorbis 数据包组成,包括编码信息、音频数据和元数据。
  6. ALAC (Apple Lossless Audio Codec)

    • 由 Apple 开发的无损格式,用于 iTunes 和 Apple Music。
    • 类似于 FLAC,但优化了与 Apple 设备和软件的兼容性。
  7. AIFF (Audio Interchange File Format)

    • 由 Apple 开发,通常用于存储未压缩的音频数据。
    • 类似于 WAV,包含音频格式和音频数据块。
  8. WMA (Windows Media Audio)

    • 由微软开发的一系列音频编解码器和其对应的音频编码格式。
    • 支持有损和无损压缩。

这些格式中,有损压缩格式(如 MP3、AAC、OGG Vorbis)在减小文件大小的同时牺牲了一定的音质,而无损格式(如 FLAC、ALAC、WAV)则保留了完整的音频质量,但文件大小相对较大。每种格式都有其特定的使用场景和优点。

2.2.3 视频文件

二进制视频文件格式涉及视频和音频的存储和编码,以及通常包含的元数据。这些格式为了满足不同的播放质量、文件大小和兼容性需求而设计。以下是一些常见的二进制视频文件格式及其组织方式:

  1. MP4 (MPEG-4 Part 14)

    • 用于存储数字视频和音频流,以及字幕和图像。
    • 基于 ISO 基础媒体文件格式,包含多个轨道,每个轨道存储一种类型的数据(视频、音频、字幕等)。
    • 支持多种编解码器,如 H.264(视频)和 AAC(音频)。
  2. AVI (Audio Video Interleave)

    • 由微软开发,同步存储音频和视频数据。
    • 数据被分成块,每个块可以包含音频或视频数据。
    • 支持多种不同的编解码器。
  3. MOV (QuickTime File Format)

    • 由苹果公司开发,类似于 MP4。
    • 包含多个轨道,每个轨道用于存储不同类型的媒体数据。
    • 常用于存储和分享高清视频。
  4. WMV (Windows Media Video)

    • 微软开发的一系列视频编解码器和其视频编码格式。
    • 专为流媒体应用设计,强调压缩效率。
  5. FLV (Flash Video)

    • 用于通过互联网传输视频流。
    • 常见于早期的在线视频共享网站,如 YouTube 初期。
    • 包含视频和音频数据,支持 H.264 编码。
  6. MKV (Matroska Video)

    • 开源格式,能够容纳无限数量的视频、音频、图片或字幕轨道。
    • 被用于存储多语言电影和电视节目。
  7. WebM

    • 开源格式,专为网络使用设计。
    • 支持高质量视频和低带宽要求。
    • 基于 Matroska 容器,通常使用 VP8 或 VP9 视频编解码器和 Vorbis 或 Opus 音频编解码器。
  8. H.264/AVC (Advanced Video Coding)

    • 并非一个容器格式,而是一种视频编解码标准。
    • 广泛用于各种格式,包括 MP4、AVI、MKV 等。
    • 提供高效的视频压缩,被广泛用于网络和高清视频。
  9. HEVC (High Efficiency Video Coding)H.265

    • H.264 的继承者,提供更高效的视频压缩。
    • 用于 4K 和更高分辨率的视频。

每种格式都包含一个或多个视频和音频流,可能还包括字幕和元数据(如标题、作者、时间戳等)。视频文件的复杂性来自于需要同时编解码视频和音频流,以及处理文件中的同步和元数据。不同的格式和编解码器平衡了压缩效率、质量、兼容性和专利许可等因素。

2.2.4 可执行文件

二进制可执行文件是一种特殊类型的二进制文件,包含能够被操作系统直接执行的机器码。这些文件是软件和程序的核心,因为它们让计算机能夠执行特定的命令和任务。以下是二进制可执行文件的一些关键特征和组织方式:

  1. 机器码

    • 可执行文件包含的机器码是直接由计算机的中央处理单元(CPU)执行的指令集。
    • 这些指令是以二进制格式编写的,针对特定的硬件体系结构设计。
  2. 文件格式

    • 不同操作系统和平台有不同的可执行文件格式:
      • 在 Windows 中,常见的可执行文件格式是 .exe(可执行文件)和 .dll(动态链接库)。
      • 在 Unix-like 系统(包括 Linux 和 macOS)中,可执行文件通常没有扩展名,但标记为可执行,并遵循 ELF(Executable and Linkable Format)或 Mach-O(macOS)格式。
  3. 组成部分

    • 可执行文件通常包含以下部分:
      • 头部:包含文件的元数据,如类型、体系结构、入口点等。
      • 文本段:包含程序的实际机器码指令。
      • 数据段:包含静态变量和全局变量。
      • 资源段(特别是在 Windows 中):包含程序的资源,如图标、UI 元素等。
  4. 链接

    • 可执行文件通常由编译器从源代码编译而来,并通过链接器与其他库文件或模块链接在一起。
  5. 加载和执行

    • 当用户运行可执行文件时,操作系统的加载器会将文件加载到内存中,CPU 会开始执行文件中的机器指令。
  6. 依赖关系

    • 许多可执行文件依赖于特定的库文件或系统资源,这些依赖需要在文件执行时可用。

二进制可执行文件是软件发布的关键组成部分,它们使得开发的程序能够在目标计算机上运行。这些文件的具体格式和结构依赖于操作系统和硬件体系结构,因此通常不跨平台兼容。

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

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

相关文章

GD32F4中断向量查询

中断向量表 中断向量对应函数 __Vectors DCD __initial_sp ; Top of StackDCD Reset_Handler ; Reset HandlerDCD NMI_Handler ; NMI HandlerDCD HardFault_Handler ;…

行为型设计模式(三)状态模式 备忘录模式

状态模式 State 1、什么是状态模式 状态模式允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类,将对象的行为包装在不同的状态类中,对象在运行时根据内部状态的改变而改变它的行为。 2、为什么使用状态模式 封装了…

【数字图像处理】实验四 图像分割

一、实验内容: 1. 熟悉和掌握利用Matlab工具进行数字图像的读、写、显示等数字图像处理基本步骤。 2. 熟练掌握各种图像分割的基本原理及方法。 3. 能够从深刻理解图像分割,并能够思考拓展到一定的应用领域。 二、实验…

雷军1992年发表的计算机论文,强啊!

提起雷军,相信大家都非常熟悉了,90年代初毕业于武大计算机系,后来一路创业,现如今在相应领域的成就也有目共睹。 之前咱们这里也分享过雷军早年间写的文字博客,他曾在早期博客中讲述了自己的编程之路,以及当…

机器学习 | 概率图模型

见微知著,睹始知终。 见到细微的苗头就能预知事物的发展方向,能透过微小的现象看到事物的本质,推断结论或者结果。 概率模型为机器学习打开了一扇新的大门,将学习的任务转变为计算变量的概率分布。 实际情况中,各个变量…

一个简单的 HTTP 请求和响应服务——httpbin

拉取镜像 docker pull kennethreitz/httpbin:latest 查看本地是否存在存在镜像 docker images | grep kennethreitz/httpbin:latest 创建 deployment,指定镜像 apiVersion: apps/v1 kind: Deployment metadata:labels:app: httpbinname: mm-httpbinnamespace: mm-…

FPC柔性排线用什么胶水能固定到线路板上?

为了固定FPC柔性排线到线路板上,可以使用特殊用于电子组装的胶水。常用的胶水类型有: 1.氰基丙烯酸酯胶水(Cyanoacrylate) 被称为“超级胶水”或“快干胶水”。这种胶水对FPC通常有很好的附着力。 2.环氧树脂胶水 环氧树脂胶水…

C++之深拷贝和浅拷贝

目录 浅拷贝 深拷贝 赋值运算符重载的深拷贝 在学习C类和对象时我们学习了浅拷贝,本期我们将再次回顾浅拷贝并为大家讲述深拷贝的概念。 浅拷贝 在学习类和对象时我们学习了拷贝构造函数的概念,而且我们也知道,因为拷贝构造函数属于类的默…

02|用LangChain快速构建基于“易速鲜花”本地知识库的智能问答系统

02|用LangChain快速构建基于“易速鲜花”本地知识库的智能问答系统 项目及实现框架 我们先来整体了解一下这个项目。 项目名称:“易速鲜花”内部员工知识库问答系统。 项目介绍:“易速鲜花”作为一个大型在线鲜花销售平台,有自…

SpringCloudGateway网关处拦截并修改请求

SpringCloudGateway网关处拦截并修改请求 需求背景 老系统没有引入Token的概念,之前的租户Id拼接在请求上,有的是以Get,Param传参形式;有的是以Post,Body传参的。需要在网关层拦截请求并进行请求修改后转发到对应服务。…

软件工程快速复习(期末急救)

每个同学要假想自己是一个项目经理,去完成一个软件项目,比如医院管理系统,自动设备控制系统等,以面向结构的软件工程方法,说出完成项目的步骤,涉及到的具体技术。初步了解面向对象的方法的与面向结构的方法…

Linux网络编程——字节序

一、概念 字节序是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序。 二、分类 字节序有两者常见序: 1. Big-Endian(大端):高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。如&#x…

量化交易学习笔记:XGBoost 在量化选股中的应用

一、引言 本篇文章通过借鉴传统机器学习算法——XGBoost——对相同的量价因子进行实验,方便与深度学习模型进行对比实践。 二、算法介绍 XGBoost 是在 Gradient Boosting(梯度提升)框架下实现的机器学习算法,全称为“极限梯度提…

图神经网络并在 TensorFlow 中实现

asokraju.medium.com 一、说明 本文将引导您了解图神经网络 (GNN) 并使用 TensorFlow 实现该网络。在后续的 文章中,我们讨论 GNN 的不同变体及其实现。这是一个分步计划: 图神经网络 (GNN) 的使用:我们首先讨论 GNN 是什么、它们如何工作以及…

论文阅读<MULTISCALE DOMAIN ADAPTIVE YOLO FOR CROSS-DOMAIN OBJECT DETECTION>

论文链接:https://arxiv.org/pdf/2106.01483v2.pdfhttps://arxiv.org/pdf/2106.01483v2.pdf 代码链接:GitHub - Mazin-Hnewa/MS-DAYOLO: Multiscale Domain Adaptive YOLO for Cross-Domain Object DetectionMultiscale Domain Adaptive YOLO for Cross…

[JS设计模式]Command Pattern

文章目录 举例说明优点缺点完整代码 With the Command Pattern, we can decouple objects that execute a certain task from the object that calls the method. 使用命令模式,我们可以将执行特定任务的对象与调用该方法的对象解耦。 怎么理解 执行特定任务的对…

【SpringBoot】之Security进阶使用

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《SpringBoot开发之Security系列》。&#x1f3af…

解决 Linux git push 贡献者不同(没有出现绿点)的问题

第一步,通过下面的指令,修改 linux git 的配置文件: vi ~/.gitconfig会进入下图界面: 进入本地(Windows)中 git 的设置界面 复制 名称 和 Email 到 gitconfig 里,不要在末尾加 (空…

直排轮滑教程4

蹬地 1,前面练习了蹬地的结构,知道蹬地方向,如何用力。下面来练习具体的蹬地的方法,轮滑蹬地有自己特点。 2,技术方法和特点:蹬地速度快,蹬地有弹性。似跳非跳蹬。 3,四轮着地。轮…

使用PE信息查看工具和Beyond Compare文件比较工具排查dll文件版本不对的问题

目录 1、问题说明 2、修改了代码,但安装版本还是有问题 3、使用PE信息查看工具查看音视频库文件(二进制)的时间戳 4、使用Beyond Compare比较两个库文件的差异 5、找到原因 6、最后 C软件异常排查从入门到精通系列教程(专栏…