Flutter 웹 개발을 하면서 이미지를 다룰 일이 있어 이참에 파일에 대한 공부를 할려고 합니다.
인파님의 파일 정리글 이 글을 보며 정리했습니다. 부족한 부분은 인파님 글을 보시는 걸 추천해요~
Binary란 이진 데이터를 의미하며 "1"과 "0"만을 사용하여 2개의 수를 나타내는 진법을 뜻하는, 컴퓨터를 다루는데 있어 가장 근본이 되는 체계라고 볼 수 있다.


Base64인코딩을 통해 변수에 이미지,파일을 텍스트로 저장하여 사용이 가능합니다.
일반적으로 다루는 경우는
import 'dart:convert';
void main() {
final str = "Hello world";
final bytes = utf8.encode(str);
// base64 인코딩
final base64Str = base64.encode(bytes);
print(base64Str); // SGVsbG8gd29ybGQ=
final decodeBytes = base64.decode(base64Str);
print(decodeBytes); // [72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]
final decodeStr = utf8.decode(decodeBytes);
print(decodeStr);// Hello world
}
BLOB은 주로 이미지,오디오,비디오와 같은 멀티미디어 파일 바이너리를 객체 형태로 저장한 것을 의미한다
멀티 미디어 파일은 대다수 용량이 큰 경우가 많기 때문에, 이를 데이터베이스에 효과적으로 저장하기 위해 고안된 자료형이라 볼 수 잇다.
Base64와 달리 ObjectUrl을 통해 접근이 가능하여 간결한 코드 작성이 가능하다는 장점이 있다.
아래 예제를 통해 blob형태로 만드는 법 Object URL을 얻는 방법을 보자.
import 'dart:html';
void main() {
var blob = Blob(['abc']);
var r = FileReader();
r.readAsArrayBuffer(blob);
r.onLoadEnd.listen((e) {
var data = r.result;
print(data); // Uint8List
final base64Str = base64.encode(data);
// Base 64
});
var objectUrl = Url.createObjectUrlFromBlob(blob);
print(objectUrl); // blob:null/55662740-e2c5-402b-b7c3-937eca5e2a2f
// 그외에 ObjectURL을 만드는 메소드들
// createObjectUrl(dynamic blob_OR_source_OR_stream) → String
// createObjectUrlFromSource(MediaSource source) → String
// createObjectUrlFromStream(MediaStream stream) → String
}
Blob의 형태 (JS)

ArrayBuffer 객체는 이미지,동영상과 같은 멀티미디어 데이터 덩어리를 표준 JS에서 다루기 위해 도입됬다.
일반적으로 실시간 방송과 같이 영상내용을 송출할 때에, 영상이라고 하는 실시간 데이터를 계속해서 전달해줘야 유저들이 이것을 볼 수 있다.즉, 데이터를 잘게 쪼개서 전송해야 하는 상황이 발생한다는 것이다.
지금까지 Blob,Base64의 경우 사람이 읽고 다루기 편하게 가공된 데이터 타입이라면, ArrayBuffer는 보다 오리지널에 가까운 느낌이다.

https://inpa.tistory.com/entry/JS-%F0%9F%93%9A-Base64-Blob-ArrayBuffer-File-%EB%8B%A4%EB%A3%A8%EA%B8%B0-%EC%A0%95%EB%A7%90-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-%EC%89%BD%EA%B2%8C-%EC%84%A4%EB%AA%85
여기서 고대로 배껴오고 출처 표시도 안하는...