这一次,弄明白JS中的文件相关(一):概念篇
概念是学习的基础。在学习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中的文件相关(一):概念篇的更多相关文章
- js中scroll滚动相关
js中scroll滚动相关 scroll,滚动,一般讨论的是网页整体与浏览器之间的关系. 一.元素相关 属性/方法 解释 element.scrollHeight 返回元素的整体高度. element ...
- Head First Python-Python中与文件相关的操作-读、处理、写
最近在看head first python,前面也写了一些笔记,但是基本上没有涉及到一些完整的代码,现在将书中的文件相关操作的代码整理,供以后参考. 主要分为两大部分,读取文件.处理异常,处理文件.存 ...
- JavaScript中的this详解(彻底弄懂js中的this用法)!
要想学好js,那么其中那些特别令人混淆迷惑的知识点,就一定要弄清楚.this关键字就是其中让初学者比较迷惑的知识点之一,不过灵活运用this可以提升代码的性能和复用性,那么今天我就和大家一起来了解th ...
- linux中Makefile文件相关内容
第一章.概述什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional(专业)的程序员,m ...
- 让你弄懂js中的闭包
目录 闭包 闭包如何产生 闭包是什么 常见的闭包 闭包的作用 闭包的生命周期 闭包的应用 闭包的缺点 内存泄露 内存溢出 闭包面试题 闭包 之前在我执行上下文执行上下文栈这篇文章中,出现了这样一个题目 ...
- 彻底弄懂JS中的this
首先,用一句话解释this,就是:指向执行当前函数的对象. 当前执行,理解一下,也就是说this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定.this到底指向谁?this的最终指向的 ...
- 分分钟弄明白UML中泛化 , 实现 , 关联, 聚合, 组合, 依赖
在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization), 关联(Association), 聚合(Aggregation), 组合(Compo ...
- 弄明白kubernetes中的“三种IP”
Node IP : Node节点的IP地址 Pod IP:Pod的IP地址 Cluster IP : Service 的IP地址 首先,Node IP是Kubernetes集群中每个节点(服务器)物理 ...
- 今天才知道原来我还没弄清楚js中全局变量和局部变量的定义...
查资料看到这段还不错,来源:原文:https://blog.csdn.net/czh500/article/details/80429133 粘过来记录一下... 1.使用var声明变量,在方法内部是 ...
- 配置webpack.config.js中的文件
webpack.config.js文件中,主要包括 entry:入口文件 output:出口文件 module:模块 plugins:插件 这几部分 1.基本配置 运行 webpack 这一命令可以将 ...
随机推荐
- 【干货】前端开发VUE实例
最近公司招聘前端开发----VUE方向. 技术面试是必不可少的,发现大多数人应该没有掌握其开发技术,今天就大概总结一下 一.准备工作 需要用到VSCODE最新版,nodejs,vue2.0(现在vue ...
- Regions 题解
Regions 这里提供一种时间复杂度不那么优秀但十分好写也好理解的做法. 题目大意 给定一颗 \(n\) 个节点的树,每个节点拥有一个颜色,进行若干次询问,每次询问给出两种颜色 \(A,B\),求所 ...
- PolarD&N2023秋季个人挑战—Crypto全解
EasyRSA (额..这个题看错了不是挑战赛的.这里当做好题记录下来了) 题目信息:500 分 5 Polar币 from Crypto.Util.number import bytes_to_lo ...
- Redis主从复制部署小结
Redis主从 搭建主从架构 单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离. 主从数据同步原理 全量同步 主从第一次建立连接时,会执行全量同 ...
- 安装了less后仍然报错:Error: Cannot find module 'less'
结果是命令有点问题,正常来说是用下面的: npm i less –save-dev-g 然后可以正常启动了: --------------------------------------------- ...
- kafka和zookeeper安装
一.Kafka简介 Kafka 被称为下一代分布式消息系统,是非营利性组织ASF(Apache Software Foundation,简称为ASF)基金会中的一个开源项目,比如HTTP Server ...
- pkg-config手册
定义 pkg-config是一款用于返回已安装库元信息的工具: (语法)概要 pkg-config [--modversion] [--help] [--print-errors] [--silenc ...
- Python中的爬虫应用及常用Python库
Python的爬虫应用非常广泛,以下是一些典型的示例: 数据采集:使用爬虫可以从网页上抓取数据,并将其保存到本地或数据库中.这对于构建大规模数据集.进行市场调研.舆情监测等任务非常有用. 搜索引擎索引 ...
- freeswitch的一个性能问题
概述 freeswitch是一款简单好用的VOIP开源软交换平台. 在fs的使用过程中,会遇到各种各样的问题,各种问题中,性能问题是最头疼的. 最近在测试某些场景的时候,压测会造成fs的内存占用持续升 ...
- C#中的类和继承
公众号「DotNet学习交流」,分享学习DotNet的点滴. 类继承 通过继承我们可以定义一个新类,新类纳入一个已经声明的类并进行扩展. 可以使用一个已经存在的类作为新类的基础.已存在的类称为基类(b ...