一文搞懂base64!干货

一、为什么要使用 base64

我们知道一个字节可表示的范围是 0 ~ 255(十六进制:0x00 ~ 0xFF), 其中 ASCII 值的范围为 0 ~ 127(十六进制:0x00 ~ 0x7F);而超过 ASCII 范围的 128~255(十六进制:0x80 ~ 0xFF)之间的值是不可见字符。

ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语,而其扩展版本延伸美国标准信息交换码则可以部分支持其他西欧语言,并等同于国际标准 ISO/IEC 646。

在 ASCII 码中 0 - 31和 127 是控制字符,共 33 个。以下是其中一部分控制字符:

其余 95 个,即 32 - 126 是可打印字符,包括数字、大小写字母、常用符号等。

当不可见字符在网络上传输时,比如说从 A 计算机传到 B 计算机,往往要经过多个路由设备,由于不同的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,这是不利于传输的。

为了解决这个问题,我们可以先对数据进行编码,比如 base64 编码,变成可见字符,也就是 ASCII 码可表示的可见字符,从而确保数据可靠传输。Base64 的内容是有 0 ~ 9,a ~ z,A ~ Z,+,/ 组成,正好 64 个字符,这些字符是在 ASCII 可表示的范围内,属于 95 个可见字符的一部分。

二、什么是 base64

Base64 是一种基于 64 个可打印字符来表示二进制数据的表示方法。由于 2⁶ = 64 ,所以每 6 个比特为一个单元,对应某个可打印字符。3 个字节有 24 个比特,对应于 4 个 base64 单元,即 3 个字节可由 4 个可打印字符来表示。相应的转换过程如下图所示:

Base64 常用于在处理文本数据的场合,表示、传输、存储一些二进制数据,包括 MIME 的电子邮件及 XML 的一些复杂数据。在 MIME 格式的电子邮件中,base64 可以用来将二进制的字节序列数据编码成 ASCII 字符序列构成的文本。使用时,在传输编码方式中指定 base64。使用的字符包括大小写拉丁字母各 26 个、数字 10 个、加号 + 和斜杠 /,共 64 个字符,等号  = 用来作为后缀用途。Base64 相应的索引表如下:

了解完上述的知识,我们以编码 Man 字符串为例,来直观的感受一下编码过程。Man 由 M、a 和 n 3 个字符组成,它们对应的 ASCII 码为 77、97 和 110。

接着我们以每 6 个比特为一个单元,进行 base64 编码操作,具体如下图所示:

由图可知,Man (3字节)编码的结果为 TWFu(4字节),很明显经过 base64 编码后体积会增加 1/3。Man 这个字符串的长度刚好是 3,我们可以用 4 个 base64 单元来表示。但如果待编码的字符串长度不是 3 的整数倍时,应该如何处理呢?

如果要编码的字节数不能被 3 整除,最后会多出 1 个或 2 个字节,那么可以使用下面的方法进行处理:先使用 0 字节值在末尾补足,使其能够被 3 整除,然后再进行 base64 的编码。

以编码字符 A 为例,其所占的字节数为 1,不能被 3 整除,需要补 2 个字节,具体如下图所示:

由上图可知,字符 A 经过 base64 编码后的结果是 QQ==,该结果后面的两个 = 代表补足的字节数。而最后个 1 个 base64 字节块有 4 位是 0 值。

接着我们来看另一个示例,假设需编码的字符串为 BC,其所占字节数为 2,不能被 3 整除,需要补 1 个字节,具体如下图所示:

由上图可知,字符串 BC 经过 base64 编码后的结果是 QkM=,该结果后面的 1 个 = 代表补足的字节数。而最后个 1 个 base64 字节块有 2 位是 0 值。

三、base64 编码的应用

3.1 显示 base64 编码的图片

在编写 HTML 网页时,对于一些简单图片,通常会选择将图片内容直接内嵌在网页中,从而减少不必要的网络请求,但是图片数据是二进制数据,该怎么嵌入呢?绝大多数现代浏览器都支持一种名为 Data URLs 的特性,允许使用 base64 对图片或其他文件的二进制数据进行编码,将其作为文本字符串嵌入网页中。

Data URLs 由四个部分组成:前缀(data:)、指示数据类型的 MIME 类型、如果非文本则为可选的 base64 标记、数据本身:

data:[<mediatype>][;base64],<data>

mediatype 是个 MIME 类型的字符串,例如 "image/jpeg" 表示 JPEG 图像文件。如果被省略,则默认值为 text/plain;charset=US-ASCII。如果数据是文本类型,你可以直接将文本嵌入(根据文档类型,使用合适的实体字符或转义字符)。如果是二进制数据,你可以将数据进行 base64 编码之后再进行嵌入。比如嵌入一张图片:

<img alt="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...">

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型,是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

常见的 MIME 类型有:超文本标记语言文本 .html text/html、PNG图像 .png image/png、普通文本 .txt text/plain 等。

但需要注意的是:如果图片较大,图片的色彩层次比较丰富,则不适合使用这种方式,因为该图片经过 base64 编码后的字符串非常大,会明显增大 HTML 页面的大小,从而影响加载速度。 除此之外,利用 HTML FileReader API,我们也可以方便的实现图片本地预览功能,具体代码如下:

<input type="file" accept="image/*" onchange="loadFile(event)">
<img id="output"/>
<script>
  const loadFile = function(event) {
    const reader = new FileReader();
    reader.onload = function(){
      const output = document.querySelector('#output');
      output.src = reader.result;
    };
    reader.readAsDataURL(event.target.files[0]);
  };
</script>

在完成本地图片预览之后,可以直接把图片对应的 Data URLs 数据提交到服务器。针对这种情形,服务端需要做一些相关处理,才能正常保存上传的图片,这里以 Express 为例,具体处理代码如下:

const app = require('express')();

app.post('/upload', function(req, res){
  let imgData = req.body.imgData; // 获取POST请求中的base64图片数据
  let base64Data = imgData.replace(/^data:image\/\w+;base64,/, "");
  let dataBuffer = Buffer.from(base64Data, 'base64');
  fs.writeFile("image.png", dataBuffer, function(err) {
    if(err){
       res.send(err);
    }else{
       res.send("图片上传成功!");
    }
    });
});
3.2 浏览器端图片压缩

在一些场合中,我们希望在上传本地图片时,先对图片进行一定的压缩,然后再提交到服务器,从而减少传输的数据量。在前端要实现图片压缩,我们可以利用 Canvas 对象提供的 toDataURL() 方法,该方法接收 typeencoderOptions 两个可选参数。

其中 type 表示图片格式,默认为 image/png。而 encoderOptions 用于表示图片的质量,在指定图片格式为 image/jpegimage/webp 的情况下,可以从 0 到 1 的区间内选择图片的质量。如果超出取值范围,将会使用默认值 0.92,其他参数会被忽略。

下面我们来看一下具体如何实现图片压缩:

// compress.js
const MAX_WIDTH = 800; // 图片最大宽度

function compress(base64, quality, mimeType) {
  let canvas = document.createElement("canvas");
  let img = document.createElement("img");
  img.crossOrigin = "anonymous";
  return new Promise((resolve, reject) => {
    img.src = base64;
    img.onload = () => {
      let targetWidth, targetHeight;
      if (img.width > MAX_WIDTH) {
        targetWidth = MAX_WIDTH;
        targetHeight = (img.height * MAX_WIDTH) / img.width;
      } else {
        targetWidth = img.width;
        targetHeight = img.height;
      }
      canvas.width = targetWidth;
      canvas.height = targetHeight;
      let ctx = canvas.getContext("2d");
      ctx.clearRect(0, 0, targetWidth, targetHeight);
      ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
      let imageData = canvas.toDataURL(mimeType, quality / 100);
      resolve(imageData);
    };
  });
}

对于返回的 Data URL 格式的图片数据,为了进一步减少传输的数据量,我们可以把它转换为 Blob 对象:

function dataUrlToBlob(base64, mimeType) {
  let bytes = window.atob(base64.split(",")[1]);
  let ab = new ArrayBuffer(bytes.length);
  let ia = new Uint8Array(ab);
  for (let i = 0; i < bytes.length; i++) {
    ia[i] = bytes.charCodeAt(i);
  }
  return new Blob([ab], { type: mimeType });
}

在转换完成后,我们就可以压缩后的图片对应的 Blob 对象封装在 FormData 对象中,然后再通过 AJAX 提交到服务器上:

function uploadFile(url, blob) {
  let formData = new FormData();
  let request = new XMLHttpRequest();
  formData.append("image", blob);
  request.open("POST", url, true);
  request.send(formData);
}

其实 Canvas 对象除了提供 toDataURL() 方法之外,它还提供了一个 toBlob() 方法,该方法的语法如下:

canvas.toBlob(callback, mimeType, qualityArgument)

toDataURL() 方法相比,toBlob() 方法是异步的,因此多了个 callback 参数,这个 callback 回调方法默认的第一个参数就是转换好的 blob 文件信息。

介绍完上述的内容,我们来看一下本地图片压缩完整的示例:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>本地图片压缩</title>
  </head>
  <body>
    <input type="file" accept="image/*" onchange="loadFile(event)" />
    <script src="./compress.js"></script>
    <script>
      const loadFile = function (event) {
        const reader = new FileReader();
        reader.onload = async function () {
          let compressedDataURL = await compress(
            reader.result,
            90,
            "image/jpeg"
          );
          let compressedImageBlob = dataUrlToBlob(compressedDataURL);
          uploadFile("https://httpbin.org/post", compressedImageBlob);
        };
        reader.readAsDataURL(event.target.files[0]);
      };
    </script>
  </body>
</html>

四、如何进行 base64 编码和解码

4.1 使用 btoa 与 atob 函数

在 JavaScript 中,有两个函数被分别用来处理解码和编码 base64 字符串:

  • btoa():从字符串创建一个 base64 编码的 ASCII 字符串,其中字符串中的每个字符都被视为一个二进制数据字节。

  • atob():该函数能够解码通过 base64 编码的字符串数据。

btoa 使用示例
const name = 'Semlinker';
const encodedName = btoa(name);
console.log(encodedName); // U2VtbGlua2Vy
atob 使用示例
const encodedName = 'U2VtbGlua2Vy';
const name = atob(encodedName);
console.log(name); // Semlinker

介绍完 btoaatob 这两个函数,我们再来看一下它们的兼容性:

(图片来源 —— https://caniuse.com/?search=atob)

由上图可知,除了 IE6-9 和 Opera 10.1 这些版本的浏览器之外,主流的浏览器都支持 btoaatob 这两个函数。

4.2 使用第三方库

对于不支持 btoaatob 这两个函数的浏览器来说,我们可以使用第三方库,比如 js-base64 这个库,来实现 base64 的编码和解码。

具体的使用示例如下:

<!DOCTYPE html>
<html lang="zh">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Base64 编码与解码示例</title>
    <script src="https://cdn.jsdelivr.net/npm/js-base64@3.6.0/base64.min.js"></script>
  </head>
  <body>
    <h3>Base64 编码与解码示例</h3>
    <script>
      let name = Base64.encode("阿宝哥");
      console.log(name);
      console.log(Base64.decode(name));
    </script>
  </body>
</html>

在前端进行二进制处理的场景中,你可能会遇到 Data URL 转换成 Blob/File 对象的情形,接下来阿宝哥将汇总一下常用的转换函数。

五、常用转换函数

5.1 Data URL 转 Blob 对象
function dataUrlToBlob(dataurl, mimeType) {
  let bytes = window.atob(dataurl.split(",")[1]);
  let ab = new ArrayBuffer(bytes.length);
  let ia = new Uint8Array(ab);
  for (let i = 0; i < bytes.length; i++) {
    ia[i] = bytes.charCodeAt(i);
  }
  return new Blob([ab], { type: mimeType });
}

// 使用示例
let blob = dataUrlToBlob('data:text/plain;base64,aGVsbG8gd29ybGQ=','hello.txt');
console.log(blob);
5.2 Data URL 转 File 对象
function dataUrlToFile(dataurl, filename) {
  let arr = dataurl.split(","),
  mime = arr[0].match(/:(.*?);/)[1],
  bstr = atob(arr[1]),
  n = bstr.length,
  u8arr = new Uint8Array(n);
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n);
  }
  return new File([u8arr], filename, { type: mime });
}

// 使用示例
let file = dataUrlToFile('data:text/plain;base64,aGVsbG8gd29ybGQ=','hello.txt');
console.log(file);
5.3 URL 转 File 对象
function urlToFile(url, filename, mimeType) {
  return fetch(url).then((res) => {
    return res.arrayBuffer();
  }).then((buffer) =>{
    return new File([buffer], filename, { type: mimeType });
  });
}

// 使用示例
urlToFile('data:text/plain;base64,aGVsbG8gd29ybGQ=', 'hello.txt','text/plain')
  .then(function(file){ console.log(file);});

六、总结

Base64 是一种数据编码方式,目的是为了保障数据的安全传输。但标准的 base64 编码无需额外的信息,即可以进行解码,是完全可逆的。因此在涉及传输私密数据时,并不能直接使用 base64 编码,而是要使用专门的对称或非对称加密算法。如果你对加密感兴趣的话,可以阅读 玩转混合加密 这篇文章。

七、参考资源

  • 维基百科 - Base64

  • Base64 编码原理与应用

  • 知乎 - 为什么要使用base64编码,有哪些情景需求?

  • 22
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
24位转单色位图模块.ec 69msn.ec ACCESS到高级表格.ec Access操作.ec ACCSEE记录显示到超级列表框模块.ec ACSII加解密模块2.0.ec AD.ec ADO方式填充树型框.ec API操作模块.ec Base64编解码.ec BASE64编解码模块.ec Bios信息.ec BMP滤镜模块.ec BoyChong-神2多方式取IP模块.ec BoyChong专用常用模块2.ec BPL专用更新模块.ec cards.ec coolp.ec Cool皮肤模块.ec copy_dir.ec CPU占用率检测模块.ec cs.ec DES加密模块 1.0.ec DIY热键框模块.ec DLL注入模块.ec DOS命令模块.ec EC.EC EdbServer1.0客户端.ec EDB、高级表格、XLS互换.ec edb到html-1.0.ec EDB数据库客户端模块 1.0.ec edb数据库转Excel模块 1.0.ec edb数据库转Excel模块 1.3.ec edb转xls.ec eOgre.ec EtfAPI.ec ETimeFly API模块.ec Excel功能模块.ec EXE→SWF转换模块.ec ExportEdb.ec E库多条件查询模块.ec E库模糊查询模块.ec E电子琴.ec fhhs.ec FlyFox_hotkey.ec ForceSample.ec freemark模块_取文件.ec gdiplus类模块.ec GetStringSize.ec Hex-Dec.ec HTTP.ec http_ec.ec HTTP访问模块 .ec HTTP访问模块1.0.ec HTTP访问模块1.1.ec IC卡读写模块 1.0.ec internet2.ec IPbox2.ec IP地址编辑框2.0.ec jingjian.ec kernel模块.EC LED液晶控件模块(红色增强版).ec Link22.ec MD5取数据摘要.EC MDB到超级列表框.ec mmqrOICQ.ec mp3信息模块.ec NT系统服务.ec OCX控件高级注册.ec ODBC方式填充树型框.ec PGBEAPICopy.ec powerdll.ec ProcessInfo.ec ProgressBar.ec qp编解码.ec qq登录.ec QQ通讯协议模块.ec RAR压缩.ec RAR压缩模块 1.0.ec RC4 加密算法 1.0.ec RC4-林子深.EC RC4.EC RC4加密算法.ec RegEx.ec RegEx1.ec rhmisc.ec runtime.ec RUN加减模块1.0+名.ec SAVEPIC.EC SetIEProxy.ec setuser.ec sev.ec SHELL32.EC ShutDown.ec SH_RAR.EC SIMIXP.EC simixp1.0.ec simixp1.01.ec simixp1.02.ec simixp3.0.ec simixp4.0.ec SMTP.EC SPEED.EC spell.ec SQL.ec Sqlite数据库加强.ec Sqlite表管理.ec SQL到文本.ec SQL基本语句.ec sql操作模块.ec SQL数据库操作模块.ec SQL数据库最新操作模块.ec Star.ec StarlightExtinction.ec status.ec status2.ec Super-EC.ec SysResInfo.ec taskbar.ec TCP服务器.ec tcsxk.ec TESTECOM.EC tip.ec Tooltip26.ec Tooltip261.ec Tooltip27.ec Tooltip272Alpha版.ec Tooltip30版[易语言3.0以上版本].ec Tooltip31版[易语言3.0以上版本].ec Trackbar.ec TTS.EC TWnet.CN.EC URL编码解码.ec USB.ec USER32.EC user32模块.EC user模块.EC USUAL.EC VERSION.EC Vista风格化.ec W.y.k_!易模块1.10.ec WBCZ.EC WBFH.EC wf.ec WF1.EC WinAPI_窗口与组件.ec windowsXP界面模拟模块1.0.ec windowsXP界面模拟模块1.01.ec windowsXP界面模拟模块1.02.ec windowsXP界面模拟模块1.03.ec windowsXP界面模拟模块3.0.ec windowsXP界面模拟模块4.0版.ec Windows消息函数.ec WINSYS.EC WYSQL客户端.ec xlAbout.ec XP-OK.EC XP.EC XP_EC.EC XP单选框1.1.ec XP完美模拟专家.EC XP按钮1.1.ec XP界面模拟模块3.1版.ec XP皮肤1.6.ec XP选择框1.1.ec ZCL_多线程类1.01.ec ZCL_控件类库1.01.ec ZCL_文件读写1.01.ec ZCL_核库函数1.01.ec zip.ec zip压缩.ec 万能注册验证模块.ec 世恒通用安装系统文件压缩模块.ec 个性信息框1.1.ec 个性信息框1.21.ec 个性信息框1.5.ec 个性信息框1.ec 个性化电脑模块.ec 互联网扩展模块1.1.ec 五笔编码查询模块.ec 代码编辑器部分模块.ec 仿vista截图.ec 仿WinXP窗口v3.1版.ec 仿XP界面3.0特别版模块 3.0.ec 仿XP窗口2.0.ec 仿真shell库.ec 优化内存.ec 优化内存模块.ec 伟业超级列表框列宽尺寸自动调整.ec 伟业高级表格列宽尺寸自动调整.ec 传世注册.ec 低级功能模块.ec 供应商管理模块.ec 保存图片(1.0).EC 保存图片1.0.ec 保存扩展界面设置.ec 保护.ec 保证显示.ec 信息提示框控件(Tip).ec 修改菜单1.0版.ec 光驱控制模块.ec 全面操作SQL Server 2000.ec 公农历转换1.2.ec 公历转农历模块 1.0.ec 公历转换为农历.ec 六六自用模块.ec 六十四卦相.ec 关于窗口.ec 关于菜单的一些修改操作.ec 关机管理.ec 关联.ec 关联数据库和新表格.ec 关联文件.ec 关联程序.ec 关闭窗口或进程.ec 内存专用模块.ec 内存优化.ec 内存读写.ec 内存读写66.ec 内存读写模块 2.0.ec 内存读写模块.ec 内存读写模块1.0.ec 内存读写模块2.0.ec 写屏幕.ec 冰川多媒体播放模块 1.0.ec 凝逸网页取文1.0.ec 分割文件模块.ec 分割无逢文本模块.ec 分辨率.ec 列表框打印预览1.0.ec 创建任意目录 1.0.0.2.ec 创建多级目录-西风.ec 创建多级目录.ec 创建快捷方式1.0-西风.ec 创建快捷方式模块2.2.ec 创建快捷方式正.ec 创建数据库模块 1.0 .ec 创建时钟事件.ec 删除文件模块.ec 删除文本所在行.ec 判断ASCII编码.ec 判断XP外观支持文件是否存在.ec 判断字符模块.ec 判断数据库.ec 判断进程是否存在的模块.ec 到文本.ec 办公组件密码管理模块.ec 功能集一模块 1.0.ec 功能集一模块.ec 加入好友.ec 加密.ec 加密解密文本.ec 加密解密文本1.0.ec 加密配置文件操作模块.ec 加强执行1.0.ec 加解密文本1.1.ec 加载进度条.ec 加载进度条v2.0.ec 动态加载菜单模块1.0版.ec 动态显示窗口.ec 动态类名.ec 动态调整分辩率.ec 动态调用DLL函数.ec 动感图标菜单.ec 动画窗体1.3.ec 十六进制转十进制模块 .ec 十进制转化为十六进制5.ec 压缩加密文件夹.ec 压缩文件夹.ec 双功能自动编号模块.ec 发送消息_全选插入.ec 取CPU特征字.ec 取DOS执行结果.ec 取Excel表名列表模块1.0.ec 取IE地址栏.ec 取IP及地理位置模块.ec 取IP地址.ec 取mdb表名.ec 取mp3信息模块.ec 取功能键状态.ec 取十进制.ec 取句柄对应全路径文件名2.1.ec 取图片尺寸.ec 取声调拼音模块1.0.ec 取姓名.ec 取拼音带声调1.2.ec 取拼音首个字母.ec 取拼音首模块.ec 取按键名称模块.ec 取控件或窗口的标题.ec 取操作系统类别.ec 取文件时间.ec 取文件版本信息.ec 取文件相关联的图标.ec 取文件行数.ec 取文本行数.ec 取易模块信息.ec 取歌词.ec 取汉字代码.ec 取汉字全拼音模块.ec 取汉字笔画.ec 取汉字笔画1.ec 取汉字笔画模块-寒风.ec 取汉字笔画模块.ec 取注册表键句柄.ec 取焦点窗口句柄.ec 取用户机器码模块.ec 取窗口内所有控件标题.ec 取系统信息.ec 取系统信息v2.1.ec 取系统启动时间.ec 取系统字体列表1.2.ec 取系统目录.ec 取纯数字时间文本模块.ec 取网卡参数.ec 取网页元素.ec 取腾讯TT浏览器的地址栏文本模块.ec 取非系统进程全路径文件名.ec 变速模块(1.0).EC 变速模块.ec 同步目录.ec 同步缩放控件.ec 同步缩放控件1.0.ec 同步缩放窗口1.0.ec 吸附模块.ec 和是几与谁最大.ec 响应左键放开.ec 四则混合运算模块.ec 回调函数.ec 图形窗口模块.ec 图片演示-西风.EC 图片演示.EC 图片组操作类.ec 在线更新.ec 在线更新2.ec 在线查找歌词.ec 地理位置查询.ec 堕之星辰1.2.ec 填充树型框.ec 复制目录模块.ec 外挂作坊1.4.ec 外挂作坊1.40909.ec 外挂作坊1.5-第六版.ec 外挂作坊1.5版.ec 外挂作坊1.8.ec 外挂作坊1.8版.ec 外挂作坊1.8破解版.ec 外挂作坊2.0.ec 外挂作坊2.0破解版.ec 外挂作坊模块(新年礼品).ec 外挂作坊模块2.3.ec 外挂作坊模块破解版.ec 外挂作坊网游模块.ec 外挂海-超线程下载模块.ec 外挂海USB按键测试版.ec 外挂海万能模块.ec 外挂海万能模块1.52.ec 外挂海万能模块1.57B.ec 外挂海万能模块1.58.ec 外挂海万能模块1.59.ec 外挂海万能模块1.71.ec 外挂海万能模块1.7贺岁版.ec 外挂海万能模块1.81版.ec 外挂海万能模块1.84版.ec 外挂海万能模块1.85版.ec 外挂海万能模块1.87版.ec 外挂海万能模块1.95.ec 外挂海万能模块1.96.ec 外挂海万能模块2.07.ec 外挂海万能模块2.1(贺岁版).ec 外挂海截图模块1[1].0.ec 外挂海模块.ec 外挂海模块1.35.ec 外挂海模块1.36.ec 外挂海模块1.37.ec 外挂海模块1.38.ec 外挂海模块1.39.ec 外挂海模块1.40.ec 外挂海模块1.41.ec 外挂海模块1.42.ec 外挂海模块1.43.ec 外挂海模块1.44.ec 外挂海模块1.45.ec 外挂海模块1.46.ec 外挂海模块1.47.ec 外挂海模块1.49.ec 外挂海模块1.50.ec 外挂海模块1.51.ec 外挂海模块1.52.ec 外挂海模块1.6(恶魔版).ec 外挂海模块1.6Beta2斩月内测版 外挂海模块1.6Beta2斩月内测版.ec 外挂海模块高级版.ec 外部列表框全操作.ec 外部控件操作类.ec 外部数据库.ec 外部超级列表框类.ec 多功模块.ec 多功能模块(1).ec 多功能模块(2).ec 多媒体.ec 多彩文字显示模块.ec 多彩渐变换肤模块.ec 多方式取IP模块.ec 多种对话框模块 1.0.ec 多种对话框模块.ec 多线程支持模块.ec 多表格载入ADO数据.ec 大强工作室关于窗口.ec 天气预报信息.ec 好用的东西.ec 好色按钮1.0.ec 好色按钮1.ec 好色按钮2.0.ec 威灵-简装版.ec 威灵.ec 字段不重复.ec 字节集.ec 字节集增强模块.ec 安全关机.ec 完全进制转换.ec 定时提醒1.1.ec 客户管理模块.ec 对内存进行读写操作.0.ec 对剪贴版进行数据获取和数据设置.ec 对话框代码自动生成器.ec 寻找子文件夹.ec 寻找注册表.ec 寻找磁盘文件.ec 寻找磁盘文件模块 1.0.ec 寻找窗口内指定按钮并单击.ec 导出数据1.1.ec 导出数据1.21.ec 封包加解密.ec 小小鸡内存优化.ec 小鱼儿.ec 少男少女论坛万能模块.ec 屏幕保护支持库1.1.ec 屏幕保护支持模块.ec 屏幕分辩率更改.ec 屏幕分辩率更改1.0.ec 屏幕录像.ec 屏幕狩猎者v1.0.ec 屏蔽win键.ec 屏蔽系统功能键.ec 屏蔽超文本浏览框右键菜单2.2.ec 属性夹.ec 工具提示.ec 常用API.ec 常用功能.ec 常用模块1.2.ec 常用软件性能优化模块.ec 幻风.ec 度量转换.ec 异常通知辅助模块.ec 弹出下载窗口.ec 弹出网页广告.ec 彗星模块1.3.ec 彗星正则表达式类.ec 形象大使1.0.ec 循环冗余校验.EC 快捷方式.ec 成组随机数.ec 我的信息框.ec 我的对话框.ec 所有模块.ec 扑克.ec 扑克图像模块.ec 扑克图像模块1.1.ec 扑克牌模块1.0.ec 打印数据1.20-绿营.ec 打印模块.ec 打印预览1.1.ec 打印预览1.3.ec 打印预览1.33.ec 打印预览2.41(注册表配置).ec 打印预览2.42(外部文件配置).ec 打印预览2.44(注册表配置).ec 打印预览2.45(注册表配置).ec 打印预览模块 1.0.ec 打开外部关联文件及调用系统关于窗口模块 1.0.ec 打开多文件对话框.ec 执行批文件.ec 执行文件模块.ec 扩展按钮控件.ec 拦截外部程序消息.ec 按列排序超级列表框1.ec 控件大小调整模块.ec 控件自动缩放.ec 控件+窗口模块.ec 控制程序运行天数1.0.ec 控制系统音量.ec 控制面板.ec 控制面板模块.ec 提升权限.ec 提升进程权限.ec 提示框模块2.6.ec 提示框模块2.61.ec 提示框模块2.7.ec 提示框模块2.72Alpha版.ec 提示框模块3.1版[易语言3.0以上版本].ec 搜索邮件.ec 播放音频.ec 操作外部列表框.ec 操作外部组合框.ec 操作外部超级列表框1.0.ec 改变显示器状态.ec 改变系统菜单.ec 改变系统菜单1.0改进版.ec 改变系统菜单1.0简单版.ec 数值与十六进制文本的相互转换.ec 数值类文本到金额.ec 数制转换(修该).ec 数制转换.ec 数字单双.ec 数据库到超级列表框.ec 数据库增强.ec 数据库客户端模块.ec 数据库批量替换.ec 数据库操作模块.ec 数据库查找.ec 数据库管理器模块.ec 数据打包解包.ec 数据摘要模块(MD5算法实现) 飞扬工作室.ec 数据源按钮.ec 整点半点报时模块.ec 文件关联.ec 文件压缩专家.ec 文件压缩模块.ec 文件压缩解压.ec 文件图标.ec 文件夹美容模块.ec 文件字符替换模块.ec 文件拖放-银戒指.ec 文件拖放.ec 文件拖放_YE.ec 文件拖放_叶如兆.ec 文件时间操作模块1.0.ec 文件补丁模块.ec 文字背景透明.ec 文本分行1.0.EC 文本分行2.0.ec 文本分行3.0.ec 文本加密解密模块.ec 文本加解密模块.ec 文本处理扩展模块.ec 文本折行.ec 文本操作1.0.EC 文本操作模块.ec 文本数字统计.ec 文本替换模块.ec 文本统计模块 1.0.ec 文本计算.ec 文本语音朗读.ec 文本语音转换模块.EC 斑马模块.ec 新创建查询快捷方式.ec 新查询快捷方式.ec 新注册系统热键1.0.ec 新浏览文件夹.ec 新编码转换大全.ec 日期时间增强.ec 日期格式规范.ec 日期设置模块.ec 时间格式化-自由扩展型.ec 易2.55版数据库记录编辑器模块.ec 易3.5版数据库记录编辑器模块.ec 易DLL支持.ec 易之插件模块.ec 易容大师.ec 易库、高级表格、XLS互操作模块.ec 易库浏览编辑器模块.ec 易数据库插入记录模块.ec 易脚本.ec 易语言EDB数据库客户端.ec 易语言OGRE类库1.1.ec 易语言网页操作.ec 易语言辅助模块(管理员推荐).ec 易辅助模块.ec 星光灭绝1.0.ec 是否为汉字.ec 显示图片.ec 显示设置.ec 更换桌面.ec 更改光标.ec 更改文件时间操作模块1.0.ec 最小化窗口.ec 本土化易模块(已加到果子).ec 本土化易模块.ec 杀进程模块.ec 杂类功能模块一(音量邮件驱动器压缩).ec 枚举系统字体1.ec 果子的模块.ec 查找窗口内所有组件句柄.ec 查找窗口或进程并关闭.ec 查杀程序.ec 树型框三级填充.ec 树型框增强.ec 树型框操作类.ec 树型框目录显示模块.ec 树型框移动.ec 树型框附加模块-edb版.ec 树型框附加模块-外部数据库版.ec 树型磁盘与文件浏览.ec 模块.ec 模块_bmp转换为jpg.ec 模块_WinXP窗口v4.0版.ec 模块_与应用程序建立关联.ec 模块_与狡兔三窟建立关联.ec 模块_与黄金加密建立关联.ec 模块_仿WinXP窗口v1.0.ec 模块_仿WinXP窗口v1.1.ec 模块_仿WinXP窗口v2.0特别版.ec 模块_仿WinXP窗口v3.0纪念版.ec 模块_仿WinXP窗口v3.1版.ec 模块_保存扩展界面设置.ec 模块_修改菜单.ec 模块_动态修改图片组v1.0.ec 模块_动态修改图片组v1.1.ec 模块_动态修改图片组网-际飞狐修改版.ec 模块_回调函数.ec 模块_图片按钮v2.0.ec 模块_在线更新.ec 模块_数制转换.ec 模块_文本折行.ec 模块_无边框窗口设置.ec 模块_树型框.ec 模块_汉字查询.ec 模块_磁盘操作.ec 模块_禁止多次运行.ec 模块_系统功能.ec 模块_菜单项加图片.ec 模块_超级列表框.ec 模块_超级列表框快速排序2.0.ec 模块_超级列表框补丁1.0.ec 模块_软件注册.ec 模块_软件注册1.0.ec 模块_软件注册2.0.ec 模块集.ec 模拟XP.ec 模拟按键.ec 比较大小.ec 水晶进度条模块版.ec 水波特效模块.ec 永不放弃专用模块.ec 求真函数动态调用类.ec 求真文件对话框模块.ec 求真文件拖放模块.ec 求真树型框操作类.ec 求真进度下载模块.ec 汇编模块(外挂海版).ec 汇编模块(龙祥版).ec 汇编模块.ec 汇编模块1.ec 汉字助记码.ec 汉字处理.ec 汉字查询3.1版.ec 汉字转拼音.ec 汉语朗读模块 1.0.ec 汉语朗读模块.ec 注册模块.ec 注册热键(支持多热键).ec 注册热键-FlyFox.ec 注册热键.ec 注册热键_支持多热键(20050816).ec 注册热键_支持多热键_模块.ec 注册系统热键-钟华.ec 注册系统热键.ec 注册系统热键1.0-西风.ec 注册系统热键2.0.ec 注册系统热键模块 1.0.ec 注册表操作增强模块.ec 注册表操作增强模块1.0.ec 注册表操作增强模块1.2.ec 注册表操作增强模块1.32.ec 注册表简化模块.ec 注册验证模块.ec 浏览器操作模块.ec 浏览文件夹.ec 液晶控件模块.ec 液晶模块.ec 混合运算.ec 添加(删除)子项目.ec 清除数组重复成员.ec 溪流关于窗口1.0.ec 滑块条扩容模块.ec 漫步(此群管理员推荐).ec 热键输入模块.ec 特效窗口模块.ec 状态栏控件2.0.ec 状态栏控件2.ec 生成Sqlite表结构.ec 生成表格.ec 用户管理模块 1.3.ec 用户配置模块.ec 用户配置模块1.0.ec 电子琴模块.ec 电脑安全维护模块.ec 电脑性能优化模块.ec 画图模块.ec 登录确认模块 1.0.ec 登陆传世模块1.9.ec 百度回贴模块.ec 皮肤_易语言皮肤模块.ec 目录模块.ec 直接邮件发送模块.ec 硬软件常用命令模块.ec 磁性窗口2.0.ec 磁性窗口模块V1.0.ec 磁盘操作.ec 磁盘格式化模块 1.0.ec 磁盘相关.ec 禁止二次运行.ec 禁止多次运行.ec 禁止程序多次运行.ec 禁止重复运行.ec 秘密潜入OICQ1.0.ec 移动复制建多级目录模块.ec 程序内存的读写.ec 程序是否运行.EC 程序是否运行2.EC 程序自杀.ec 窗口-控件锚点.ec 窗口动画效果模块 V1.0.ec 窗口句柄&进程名互取.ec 窗口外形任我设.ec 窗口整容师(1.0).EC 窗口整容师(1.1).ec 窗口整容师1.0.EC 窗口整容师1.1.ec 窗口热键.ec 窗口贴边隐藏模块.ec 窗口透明模块.ec 立体空间矩型模块.ec 管理员登录验证模块(未加密) 1.0.ec 精易模块 V2.51.ec 系统后台服务.ec 系统服务管理模块.ec 系统登录模块.ec 系统管家-关机管理.ec 系统设置易模块 1.0.ec 系统设置易模块.ec 系统资源检测模块.ec 线程类.ec 组合框记录模块.ec 结束进程模块.ec 给选择夹加两个命令.ec 统计表模块.ec 统计重复次数.ec 绿色软件自动升级模块.ec 编码转换大全.ec 编辑标准格式公文2.0.ec 编辑框禁止字符1.0.ec 编辑框辅助功能.ec 编辑框高亮模块.ec 缩放多文档支持库.ec 网络性能优化模块.ec 网络控件模块 1.0.ec 网络控件模块.ec 网络文件模块2.0.ec 网络时间验证.ec 网络服务器模块.ec 网页操作类(光庆版2.0).ec 网页操作类(光庆版3.0).ec 网页操作类.ec 置交替色.ec 置窗口透明值.ec 置超级列表框背景图片.ec 置鼠标移入移出事件.ec 股票查询.ec 自创加解密数据.ec 自动升级模块.ec 自动填表.ec 自动更新模块 1.3.ec 自动编号模块.ec 自定义鼠标.ec 自定延时模块.ec 自解压制作.ec 良剑科技-外挂作坊模块(新年礼品).ec 色彩转换_模块.ec 花样进度条1.0.ec 获取字符串尺寸.ec 获取本机互联网IP地址.ec 菜单加图片模块 1.0.ec 菜单的一些修改操作.ec 菜单项加图片.ec 蓝风模块.ec 行数.ec 表格公式模块.ec 视频捕捉易模块.ec 解析LRC歌词文件.ec 记录集读写操作.ec 设置IE代理服务器1.0.ec 设置控件锚点.ec 设置窗口圆角.ec 设置表格模块.ec 设置鼠标活动范围.ec 识图模块.ec 详细的公农历转换 1.2.ec 详细的公农历转换1.0.ec 详细的公农历转换1.2.ec 语音报时模块.ec 语音报时模块1.0.ec 语音报时模块1.2.ec 语音报时模块1.3.ec 语音朗读易模块 1.0.ec 读.xls文件到高级表格.ec 读写Rockey加密锁.ec 读删一段.ec 读取DBF数据.ec 读取天气预报-模块.ec 读取超级列表框模块 1.0.ec 读取超级列表框模块_多条件版.ec 读文本.ec 读文本~1.ec 读易库到超级列表框1.0.ec 调整窗口大小.ec 调用PowerDll功能的模块.ec 调用外部命令.ec 调试程序检测模块.ec 超文本浏览框功能扩展模块1.2.ec 超级信息框.ec 超级列表框交替色.ec 超级列表框列宽尺寸自动调整.ec 超级列表框到文件.ec 超级列表框功能扩展2.2.ec 超级列表框单列排序.ec 超级列表框存为网页.ec 超级列表框导出EXECL.ec 超级列表框打印预览1.33.ec 超级列表框扩展模块.ec 超级列表框排序.ec 超级列表框提速模块.ec 超级列表框操作类.ec 超级列表框数据库排序.ec 超级列表框斩月模块.ec 超级列表框显示ACCESS表中数据.ec 超级列表框模糊查找.ec 超级列表框背景.ec 超级列表框补丁1.0.ec 超级列表框补助.ec 超级列表框选中项存为Excel文件.ec 超级列表框选择框状态被改变.ec 超级打印预览0716a.ec 超级模块(2.1).ec 超级模拟msn模块(1.0).ec 超级表达式计算.ec 超速读取网页源码.ec 转为汉语拼音.ec 转为汉语拼音模块 1.0.ec 转生模块.ec 软件优化.ec 软件注册模块.ec 软件注册算号器模块.ec 轻舟已过简单模块1.1.ec 输入法上屏.ec 输入法操作模块.ec 进制转换-wuflea.ec 进制转换-西风.ec 进度下载模块 V1.0 1.0.ec 进度条高级设置.ec 进程信息.ec 进程模块.ec 进程相关模块-1.ec 进程相关模块-2.ec 进程相关模块-3.ec 远程控制杂项模块(1.0).ec 远程控制杂项模块.ec 连接编译器.ec 迪克—透明窗体.ec 逍遥带符号液晶.ec 逍遥液晶.ec 逍遥简化液晶.ec 透明控件.ec 透明窗口组件.ec 通用加解密.ec 通用模块.ec 通用界面扩展.ec 通用验证码识别模块.ec 通过窗口标题取外部任意编辑框内容模块.ec 邮件发送类.ec 邮件快手1.0.ec 部品管理模块.ec 配置文件扩充操作模块.ec 配置文件操作.ec 配置文件操作模块.ec 配置文件操作模块3.0.ec 酷按钮2.2模块.ec 锁见盘数标模块.ec 锁键盘数标.ec 防破解.ec 阿拉伯数字转换汉文数字模块.ec 隐藏显示任务栏.ec 隐藏进程.ec 隐藏进程模块(1).ec 隐藏进程模块(2).ec 隐藏进程模块.ec 音量控制.ec 频谱.ec 飛狐DLL.ec 驱动器相关模块.ec 高亮显示.ec 高彩光标模块(含2种光标).ec 高精度运算模块2.1版.ec 高级信息框.ec 高级易模块集 2.2.ec 高级易模块集.ec 高级液晶数字1.1.ec 高级表格到excel.ec 高级表格到数据库.ec 高级表格扩展模块.ec 高级表格添加按钮.ec 黑客入侵模块 V1.00.ec 鼠标控制.ec
### 回答1: Linux内核是一种开源的操作系统内核,是Linux操作系统的核心组成部分。它提供了操作系统与硬件之间的抽象层,负责管理系统的资源、调度任务、提供驱动程序等功能。 Linux内核采用分层的架构,包括硬件抽象层、系统调用层、进程管理层、文件系统层和网络层等。硬件抽象层负责将不同硬件设备的接口统一起来,使得上层的软件可以方便地与硬件进行通信。系统调用层提供了一组API供用户进程调用,如文件操作、网络通信等。进程管理层负责进程的创建、销毁以及调度等任务。文件系统层负责文件的管理和存储。网络层负责网络协议的实现和网络通信。 Linux内核的工作原理可以简单概括为以下几个关键步骤。首先,当一台计算机启动时,BIOS会加载内核映像到内存中,并执行启动代码。然后,内核初始化各种数据结构、驱动程序和关键服务。接下来,内核创建一个初始的用户空间进程,称为init进程。init进程是所有其他进程的祖先进程。在此之后,内核根据调度算法来决定哪个进程可以使用CPU,并依次执行。同时,内核会提供一个中断机制,以便处理硬件事件的优先级。 内核还提供了许多系统调用供用户进程调用,以实现对各种功能的访问。当用户进程需要操作文件、创建进程或进行网络通信时,会通过系统调用将请求传递给内核,由内核代表用户进程执行相应的操作。内核通过调度算法来分配CPU时间片,并通过虚拟内存管理来管理内存资源的分配和回收。 总而言之,Linux内核是一个高度可配置和模块化的操作系统内核,通过分层架构和系统调用机制实现了对硬件的抽象和对用户进程的管理。了解Linux内核的架构和工作原理,有助于深入理解Linux操作系统以及开发和调试相关应用程序。 ### 回答2: Linux是一种开源的操作系统内核,其设计目标是为了在不同的计算机硬件平台上提供高效的、稳定的和安全的操作系统服务。 Linux内核的架构可以分为三个主要部分:进程管理、内存管理和文件系统管理。 在进程管理方面,Linux内核使用了多任务处理技术,可以同时运行多个进程。每个进程都有独立的地址空间和资源,通过调度算法可以合理分配CPU时间片,优化系统的响应速度和资源利用率。 在内存管理方面,Linux内核使用了虚拟内存技术,将物理内存和逻辑内存进行了映射,使得每个进程都有独立的地址空间。当物理内存不足时,Linux内核会通过页面置换算法将暂时不使用的页写入磁盘交换空间,以释放物理内存供其他进程使用。 在文件系统管理方面,Linux内核支持多种文件系统,包括传统的ext3和ext4文件系统,以及现代的Btrfs和XFS文件系统。它负责文件的读写操作,以及文件的权限控制和磁盘空间的管理。 Linux内核的工作原理可以简单概括为以下几个步骤:首先,启动引导程序将内核加载到内存中,并进行初始化。然后,内核分配一部分内存作为内核空间,用于存放内核代码和数据结构。接着,内核根据系统的硬件配置进行设备的初始化和驱动程序的加载。之后,内核根据系统的启动参数和配置文件进行一系列的初始化工作,包括启动系统服务和加载用户程序。最后,内核进入主循环,不断地处理中断、调度进程、管理内存和文件系统,以提供稳定的操作系统服务。 总之,Linux内核是一个复杂而高效的软件系统,它通过进程管理、内存管理和文件系统管理等功能,实现了操作系统的基本功能。了解Linux内核的架构和工作原理,有助于我们更好地理解和使用这个优秀的开源操作系统。 ### 回答3: Linux内核是一个开放源代码的操作系统内核,由一个核心程序和一组通用的系统工具组成。它是Linux操作系统的核心,负责处理硬件设备、管理系统资源、实现进程管理、文件系统和网络功能等。 Linux内核的架构可以分为两个层次:用户空间和内核空间。用户空间包括用户应用程序,如图形界面、终端程序等,它们通过系统调用接口与内核进行通信。内核空间包括内核核心的数据结构和程序,用于管理和控制硬件资源。 Linux内核的工作原理可以概括为以下几个方面: 1. 进程管理:内核负责创建、调度和终止进程。它使用进程描述符(task_struct)来跟踪进程的状态和资源使用情况,并根据调度算法分配CPU时间片给不同的进程。 2. 内存管理:内核负责管理系统的物理内存和虚拟内存。物理内存管理包括内存分配和释放,虚拟内存管理包括页面置换和页面回写等策略,以优化内存的使用效率。 3. 文件系统:内核提供文件系统接口,管理文件和目录的创建、读写和删除等操作。它通过虚拟文件系统层(VFS)将不同的文件系统统一管理,如ext4、NTFS等。 4. 设备驱动:内核提供了访问硬件设备的接口,通过设备驱动程序与硬件交互。不同的硬件设备需要不同的驱动程序,如网卡、显卡、声卡等。 5. 网络功能:内核提供TCP/IP协议栈和网络设备驱动程序,用于实现网络通信功能。它提供网络连接的建立、数据传输和断开等功能,支持各种网络协议,如HTTP、FTP、SSH等。 总的来说,Linux内核是一个非常复杂且功能强大的软件,它负责管理计算机的各种资源和提供操作系统的各种功能。通过深入理解其架构和工作原理,我们可以更好地理解和使用Linux操作系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值