概念是学习的基础。在学习JS中的文件操作之前,先把文件相关的各种概念搞清楚,很有好处。

1. 二进制:

计算机硬件仅能处理和存储二进制数据,所以不管是你正在写的代码,还是你硬盘里的小姐姐,都是以二进制的形式存储于电脑的内存和硬盘里的。

2. 编码规则:

二进制计算机看得懂,我们看不懂怎么办啊?我们能看懂的是文字、图片、视频。编码规则,就是二者之间的桥梁。

文本的编码规则很简单,就是二进制(先转成16进制)和我们能看懂的字符一一对应,图片和视频的编码要复杂一些。但可以简单理解为:二进制数据经过不同的编码规则,编码成不同的文件格式。

3. 字符集:

字符集是和编码规则密切相关的一个概念,它定义了一组字符以及这些字符对应的二进制编码。

比如Unicode字符集,包括UTF-8、UTF-16、UTF-32几种编码规则。

字符集主要应用于文本数据,相比之下,编码规则这个概念更为广泛,所有类型的文件都有自己的编码规则,不仅限于文本文件。

4. 文本文件:

文本文件,是指采用ASCII、UTF-8等文本编码规则创建的文件,其中的内容主要是人类可直接阅读的文字信息。

5. 二进制文件:

除了文本文件之外,其他类型的文件,如图像、音频、视频和可执行程序等,通常被统称为二进制文件,它们的编码规则相对复杂且非文本形式。

6. 文件类型:

文件类型指的是根据文件的内容或用途进行的大类别划分。例如,文本文件、图像文件、音频文件、视频文件、文档文件、可执行程序等。

7. 文件格式:

相较于文件类型,文件格式是一个更具体的术语,每个大类别的文件类型下可能包含多种不同的文件格式,例如文本文件包括txt、doc、xml等多种具体格式。

8. 文件后缀名:

文件后缀名并不一定是文件的真实类型,我们都知道后缀名是可以随便改的。在Linux系统中,甚至没有文件后缀名。

它的作用,只是让操作系统用默认的程序打开这个文件。在控制面板中,我们知道有一个配置是,每种文件后缀名的默认打开应用。

在这方面,有点类似于浏览器根据响应内容的mime类型,来对响应做不同的处理。

9. 文件的编码:

一个文件的编码,指的是创建这个文件时所使用的编码规则,关键词是“创建”。

10. 用不同的编码打开文件:

只有使用创建文件时采用的编码规则,才能正确打开文件。当我们用其他的编码规则试图打开文件时,将会无法打开,或者看到乱码。

这个过程中,底层的二进制数据保持不变,变化的是:因为编码规则的改变,我们所看到的内容。

11. 文件格式转换:

这个过程中,和上面是相反的。我们看到的内容保持不变,变化的是:因为编码规则的改变,底层的二进制数据不一样了。

比如我们把jpg文件转换为png,我们看到的内容是一样的,但底层的二进制数据就完全变了。

12. 流:

流这个概念,很抽象。流是一种传输数据的方式,快速连续的传输数据,允许数据分段传输。与流相对的,是一次性传输整个数据块(block)。

你可以理解为把一只大象装冰箱,和把大象煮成肉汤用一根管子流入冰箱。

我们对流比较形象的体验包括:服务器想返回一个大的文件,如果直接把文件返回,文件就会全部装入内存,可能导致内存被占满。但如果采用流的方式传输,只占用很少的内存就可以了。

在浏览器端呢,如果不采用流的方式接收文件,就要等文件全部传输完成才能开始下载,比如视频全部下载完成才能开始观看。使用流的方式接收,就可以边传输边下载,边下载边观看了。

流的诞生,首先是因为硬件的发展,开始支持这种数据传输的方式,服务器、浏览器、网络设备具备了传输流、处理流的能力。编程语言又对流进行了高级抽象,提供了流相关的API。它最早出现于Unix系统的I/O模型,然后被用于TCP/IP协议,现在,流被广泛的应用于网络通信、文件I/O、数据库连接、web开发等,可以说流无处不在。

一个最简单的流,包括数据来源(字符串、文件等)和数据的去向。打开流,数据开始传输,传输完成后,再手动关闭流。当然,大部分编程框架为了方便,都提供了传输完成后自动关闭流的功能。

那么在平时开发中,我们和流又有什么关系呢?

服务器端:在服务器端发送和接收数据,是否以流的方式进行,是我们自己选择的。后端语言都提供流相关的API,比如nodejs的Stream类。

网络传输中:数据都是以字节流的形式传输的。

浏览器端:浏览器会自动的以流的形式发送和接收数据,开发者无需显式操作。这也是我们前端在开发中,感受不到流的存在,很少使用流的原因。

需要注意的是,不管服务器是否采用流的方式发送数据,在网络传输阶段,都是字节流。浏览器也不关心服务器是否使用流,因为经过网络传输,到了浏览器这儿,接收到的都是流。

尽管如此,对于服务器来说,显式的以流的方式接收和发送数据,仍然是很有好处的。

13. mime类型:

mime类型是一种标准化的互联网标准,用于描述在网络上传输的数据类型。最初是为了扩展电子邮件以支持多种数据类型而设计的,但现在广泛应用于HTTP协议中。

mime类型由两部分组成:主要类型和子类型,中间用斜线分隔。例如:text/plain、image/jpeg、application/pdf等。

mime类型和文件格式大部分时候一一对应。你可以理解,在我们电脑里是文件格式,在HTTP协议中是mime类型。

14. 一次HTTP请求:

一次完整的HTTP请求,是指从浏览器发送请求,到浏览器接收完所有数据的全过程。如果请求的是一个视频,那么直到浏览器把这个视频下载完成,这次HTTP请求才算结束。

也就是说,一个HTTP请求完全可能持续很长时间,并不都是我们大部分时候看到的很快完成的。当然,得益于接收到的是流数据,浏览器可以边下载边播放。

这一次,弄明白JS中的文件相关(一):概念篇的更多相关文章

  1. js中scroll滚动相关

    js中scroll滚动相关 scroll,滚动,一般讨论的是网页整体与浏览器之间的关系. 一.元素相关 属性/方法 解释 element.scrollHeight 返回元素的整体高度. element ...

  2. Head First Python-Python中与文件相关的操作-读、处理、写

    最近在看head first python,前面也写了一些笔记,但是基本上没有涉及到一些完整的代码,现在将书中的文件相关操作的代码整理,供以后参考. 主要分为两大部分,读取文件.处理异常,处理文件.存 ...

  3. JavaScript中的this详解(彻底弄懂js中的this用法)!

    要想学好js,那么其中那些特别令人混淆迷惑的知识点,就一定要弄清楚.this关键字就是其中让初学者比较迷惑的知识点之一,不过灵活运用this可以提升代码的性能和复用性,那么今天我就和大家一起来了解th ...

  4. linux中Makefile文件相关内容

    第一章.概述什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional(专业)的程序员,m ...

  5. 让你弄懂js中的闭包

    目录 闭包 闭包如何产生 闭包是什么 常见的闭包 闭包的作用 闭包的生命周期 闭包的应用 闭包的缺点 内存泄露 内存溢出 闭包面试题 闭包 之前在我执行上下文执行上下文栈这篇文章中,出现了这样一个题目 ...

  6. 彻底弄懂JS中的this

    首先,用一句话解释this,就是:指向执行当前函数的对象. 当前执行,理解一下,也就是说this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定.this到底指向谁?this的最终指向的 ...

  7. 分分钟弄明白UML中泛化 , 实现 , 关联, 聚合, 组合, 依赖

    在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization), 关联(Association), 聚合(Aggregation), 组合(Compo ...

  8. 弄明白kubernetes中的“三种IP”

    Node IP : Node节点的IP地址 Pod IP:Pod的IP地址 Cluster IP : Service 的IP地址 首先,Node IP是Kubernetes集群中每个节点(服务器)物理 ...

  9. 今天才知道原来我还没弄清楚js中全局变量和局部变量的定义...

    查资料看到这段还不错,来源:原文:https://blog.csdn.net/czh500/article/details/80429133 粘过来记录一下... 1.使用var声明变量,在方法内部是 ...

  10. 配置webpack.config.js中的文件

    webpack.config.js文件中,主要包括 entry:入口文件 output:出口文件 module:模块 plugins:插件 这几部分 1.基本配置 运行 webpack 这一命令可以将 ...

随机推荐

  1. 算法1:寻找完数(JS)

    任务一:寻找完数 打印10000以内的完数 完数:与自己所有因子之和相等的数. 1 let sum = 0, i, j; // 定义变量sum.i和j 2 3 for (i = 1; i < 1 ...

  2. Xshell远程连接、MBR/BOOT和GRUB三者关系总结(系统启动过程)

    远程连接 远程连接Linux服务器的常见工具有Xshell.SecureCRT.Putty等,这些客户端连接工具在Linux服务器对应着相同SSH服务进程sshd,即远程连接都是使用SSH协议,当然它 ...

  3. Dubbo3应用开发—Dubbo3注册中心(zookeeper、nacos、consul)的使用

    Dubbo3注册中心的使用 zookeeper注册中心的使用 依赖引入 <dependency> <groupId>org.apache.dubbo</groupId&g ...

  4. Arduino Uno 引脚 –

    Arduino Uno 引脚 – Arduino Uno 板有 20 多个引脚,可用于许多不同的应用.在这篇文章中,我将为您提供 Arduino Uno 主要引脚的完整实用概述. 如果您刚开始使用 A ...

  5. 圆角android

    资源地址 <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid an ...

  6. go 流程控制之switch 语句介绍

    go 流程控制之switch 语句介绍 目录 go 流程控制之switch 语句介绍 一.switch语句介绍 1.1 认识 switch 语句 1.2 基本语法 二.Go语言switch语句中cas ...

  7. Windows系统下,GoLand的Terminal选定Git Bash作为终端,使用其上传代码时,出现中文乱码的问题

    问题描述 按照这位博主博客写的没有完全解决乱码问题博主博客 这个博主博客是我后来发现,暂时还没去验证是否可行博主博客 解决方案 notepad++直接Free Download,然后就一直下一步就无脑 ...

  8. 数据结构与算法 | 哈希表(Hash Table)

    哈希表(Hash Table) 在二分搜索中提到了在有序集合中查询某个特定元素的时候,通过折半的方式进行搜索是一种很高效的算法.那能否根据特征直接定位元素,而非折半去查找?哈希表(Hash Table ...

  9. 第1章 .NET起步

    1.1 什么是.NET? .NET 8.0 SDK下载地址:https://dotnet.microsoft.com/zh-cn/download/dotnet/8.0 .NET 是一个免费的跨平台开 ...

  10. Codeforces Round #707 (Div. 2)A~C题解

    写在前边 链接:Codeforces Round #707 (Div. 2) 心态真的越来越不好了,看A没看懂,赛后模拟了一遍就过了,B很简单,但是漏了个判断重复的条件. A. Alexey and ...