前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Dart 知识集锦 | Base64 编解码

Dart 知识集锦 | Base64 编解码

作者头像
张风捷特烈
发布2024-06-15 10:44:47
830
发布2024-06-15 10:44:47
举报
1. Dart 中的 Base64 编解码

在编程的世界中,数据的种类可谓是缤纷多彩。但是他们有本质的共性: 都是二进制的数据。在数据传输过程中,字节数组有时并不是很方便,比如网络传输。 Base64 包括小写字母a-z、大写字母A-Z、数字0-9、符号"+"、"/"一共64个字符的字符集。它可以将 字节数组 进行编码进行传输。Dart 语言的 convert 包中,有 Base64Codec 支持 Base64 编解码,下面一起来看一下其使用方式:

Base64 编码

Base64 编码是将 字节数组 转化为字符串的一种方式,如下是 Base64Encoder 的 convert 方法:

Base64 解码

Base64 的字符串是不可读的,但可以对 Base64 字符串进行解码,获取其原本的 字节数组 。如下是 Base64Decoder 的 convert 方法:

2. Base64 编码使用方式

字符串、图片、视频、音频、文件... 任何数据本质上都可以是字节数组。所以任何数据都可以进行 Base64 编码,下面先看一下对字符串的编码:

  • 字符串编码

Base64 编码的入参是字符列表,需要将文本通过 utf8 进行编码,得到 Unit8List ,然后将其作为入参进行转换。 张风捷特烈 对应的 Base64 编码为 5byg6aOO5o2354m554OI

代码语言:javascript
复制
import 'dart:convert';

void main() async {
  String data = '张风捷特烈';
  String ret = base64.encode(utf8.encode(data));
  print(ret); // 5byg6aOO5o2354m554OI

}
  • 图片/文件编码

任何文件都是字节数组,所以一张图片也有其对应的 Base64 编码,如下所示,读取一张图片的字节数组,将其通过 base64 进行编码,可以得到一个字符串:

代码语言:javascript
复制
import 'dart:convert';
import 'dart:io';
import 'dart:typed_data';

void main() async {
  String file = r'D:\Files\photo\bg\src\out.png';
  String ret = await base64File(file);
  print(ret);
}

Future<String> base64File(String path) async {
  Uint8List list = await File(path).readAsBytes();
  return base64.encode(list);
}

通过对这个字符串的解析,可以获取图片对应的原始数据,从而展示图片。这样对于一些小图片,通过 Base64 编码就可以很轻松的进行数据传输,而不是通过网络请求图片或读取资源:

代码语言:javascript
复制
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
3. Base64 解码使用方式

Base64 解码 是将编码后的字符串还原为原始字符串。如下所示,通过 base64.decode'5byg6aOO5o2354m554OI'解码得到字节数组,然后将字节数组通过 utf8 编码为字符串。当然,你也可以直接将字节数组写入文件:

代码语言:javascript
复制
import 'dart:convert';
import 'dart:typed_data';

void main() async {
  String data = '5byg6aOO5o2354m554OI';
  Uint8List bytes = base64.decode(data);
  print(utf8.decode(bytes)); //张风捷特烈
}

Flutter 中的 Image 组件有一个 memory 构造,可以接收字节数组作为图片数据源。刚好 base64 解码可以生成一个 Uint8List 对象:

下面代码,可以让 Flutter 的 Image 组件展示 Base64 编码的图片。如果 base64 非常大,可以考虑将解析逻辑放在 isolate 里解析,解析过程中展示 loading 示意:

代码语言:javascript
复制
final String baseImage = """base字符串""";
late Uint8List imageBytes;

@override
void initState() {
  super.initState();
  /// 解析数据
  imageBytes = base64.decode(baseImage);

}

/// 视图展示
Image.memory(imageBytes)

本文主要介绍了 Dart 的 Base64 编解码能力,大家也可以尝试一下,通过 Flutter 提供交互界面,来打造 Base64 编解码的小工具。匠心千刃(Blade) 正在尝试基于 tolyui 打造一个全平台的通用工具集。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Dart 中的 Base64 编解码
  • 2. Base64 编码使用方式
  • 3. Base64 解码使用方式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档