Skip to content

Commit 2b87c72

Browse files
committed
feat: Base64 decoding
1 parent cb9cf4b commit 2b87c72

13 files changed

+1070
-121
lines changed

CHANGELOG.md

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
<!--todo: release initial version -->
2-
31
# Changelog
42

53
All notable changes to this project will be documented in this file.
@@ -13,6 +11,20 @@ and this project adheres to [Dart Package Versioning](https://dart.dev/tools/pub
1311

1412
- Base64 and Base64Url encoding schemes —
1513
[12](https://github.com/dartoos-dev/dartoos/issues/12)
14+
- Base64Decode class for decoding base64-encoded text —
15+
[19](https://github.com/dartoos-dev/dartoos/issues/19).
16+
- Base64Norm class for normalizing base64-encoded texts.
17+
- Dartoos base64-encoding/decoding benchmark executable in 'example'.
18+
19+
### Changed
20+
21+
- Rand class accept as source of characters both plain and Future values.
22+
- BytesOf constructors accept both plain and Future values.
23+
24+
### Removed
25+
26+
- Rand.str constructor — **Breaking Change**.
27+
- FutureWrap.value constructor — **Breaking Change**.
1628

1729
## [0.1.0] - 2021-10-05
1830

example/base64_benchmark.dart

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
// ignore_for_file: avoid_print
2+
import 'dart:convert';
3+
import 'dart:typed_data';
4+
5+
import 'package:dartoos/dartoos.dart';
6+
7+
/// Dartoos base64-encoder/decoder vs. Dart's built-in base64-encoder/decoder.
8+
///
9+
/// Running:
10+
/// ```dart /example/base64_benchmark.dart```
11+
///
12+
/// or
13+
///
14+
/// Compile to 'jit'.
15+
/// ```dart compile jit-snapshot example/base64_benchmark.dart```
16+
/// ```dart /example/base64_benchmark.jit```
17+
Future<void> main() async {
18+
print("Dartoos base64 vs. Dart's built-in base64...");
19+
20+
const wordLength = 15000000; const elegibleChars =
21+
r'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-*/|\;:?[]{}()!@#$%*';
22+
// The bytes of a randomly generated word whose length is [wordLength]
23+
// characters.
24+
final bytes = await BytesOf.utf8(Rand(wordLength, elegibleChars));
25+
26+
final dartEncodingStart = DateTime.now().millisecondsSinceEpoch;
27+
final dartEncoded = base64Encode(bytes);
28+
final dartEncodingTime =
29+
DateTime.now().millisecondsSinceEpoch - dartEncodingStart;
30+
31+
final dartDecodingStart = DateTime.now().millisecondsSinceEpoch;
32+
final dartDecoded = base64Decode(dartEncoded);
33+
final dartDecodingTime =
34+
DateTime.now().millisecondsSinceEpoch - dartDecodingStart;
35+
36+
final dartoosEncodingStart = DateTime.now().millisecondsSinceEpoch;
37+
final dartoosEncoded = await Base64(bytes);
38+
final dartoosEncodingTime =
39+
DateTime.now().millisecondsSinceEpoch - dartoosEncodingStart;
40+
41+
final dartoosDecodingStart = DateTime.now().millisecondsSinceEpoch;
42+
final dartoosDecoded = await Base64Decode(dartoosEncoded);
43+
final dartoosDecodingTime =
44+
DateTime.now().millisecondsSinceEpoch - dartoosDecodingStart;
45+
46+
print('\n--- Encoding elapsed times ---');
47+
print('Dartoos base64-encoding: $dartoosEncodingTime ms');
48+
print('Builtin base64-encoding: $dartEncodingTime ms');
49+
print('\n--- Decoding elapsed times ---');
50+
print('Dartoos base64-decoding: $dartoosDecodingTime ms');
51+
print('Builtin base64-decoding: $dartDecodingTime ms');
52+
print('\n--- Encoding/decoding results comparison ---');
53+
print('dartoosEncoded == dartEncoded? ${dartoosEncoded == dartEncoded}');
54+
print(
55+
'dartoosDecoded == dartDecoded? ${decodedEqual(dartoosDecoded, dartDecoded)}',
56+
);
57+
print('\nEncoded text length: $wordLength characters.');
58+
}
59+
60+
bool decodedEqual(Uint8List first, Uint8List second) {
61+
if (first.length != second.length) return false;
62+
final length = first.length;
63+
int i = 0;
64+
while (i < length && first[i] == second[i]) {
65+
++i;
66+
}
67+
return i == length;
68+
}

example/dartoos_example.dart

Lines changed: 0 additions & 1 deletion
This file was deleted.

lib/base64.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,5 @@
77
library base64;
88

99
export 'src/base64/base64.dart';
10+
export 'src/base64/base64_norm.dart';
11+
export 'src/base64/base64decode.dart';

lib/dartoos.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
/// Collection of object-oriented utility classes for Dart/Flutter development.
22
///
3-
///
43
/// Inspired by [Cactoos](https://github.com/yegor256/cactoos)
54
library dartoos;
65

0 commit comments

Comments
 (0)