FileStream
은 C++ 의 std::ifstream
처럼 파일을 동기식(synchronously)으로 파일을 읽도록 도와줍니다. FileStream
이라는 이름과 달리 직접 File
을 읽는 것은 아닙니다. 대신 ArrayBuffer
와 같이 raw binary data buffer 를 파일로 생각하기에, File
을 읽기 위해서는 File.arrayBuffer()
의 결과로 얻은 ArrayBuffer
를 주어야 합니다:
import {FileStream, TextEncoding, DataType} from "./Importer/FileStream.js";
const input = document.getElementById("input");
input.addEventListener("change", (e)=>{
const file = e.target.files[0];
file.arrayBuffer().then((arrayBuffer)=>{
const stream = new FileStream(arrayBuffer);
const mimeType = stream.readString(TextEncoding.Utf8, 4)
const version = stream.read(DataType.Float);
});
});
C++ 에서는 std::promise<T>
가 결과값을 계산완료하기전까지 std::future<T>::get()
이 기다릴 수 있는 반면, JS 의 Promise
는 기다리는게 불가능하며 반드시 Promise.then()
을 사용하여 콜백함수를 등록해야함에 유의합니다.
<aside>
File.arrayBuffer() 를 읽는 FileStream 을 생성합니다.
</aside>
<aside>
stream 에서 dataType 의 크기 만큼 byte 를 추출합니다. 추출한 byte 들을 dataType 으로 재해석하여 돌려줍니다.
</aside>
<aside>
stream 에서 byteCount 만큼 byte 를 추출합니다. 추출한 byte 들을 textEncoding 으로 인코딩된 string 으로 재해석하여 돌려줍니다.
</aside>
<aside>
stream 에서 byteCount 만큼 byte 를 추출하고 폐기합니다.
</aside>
<aside>
현재까지 읽은 byte 의 갯수.
</aside>
<aside>
arrayBuffer 에 저장된 바이트들을 특정 타입으로 해석하여 돌려줍니다.
</aside>
<aside>
toUtf8String(), toUtf16String(), toShiftJisString()
arrayBuffer 에 저장된 바이트들을 string 으로 해석하여 돌려줍니다.
</aside>
<aside>
인자로 준 DataType 의 byte 갯수를 얻습니다.
</aside>