클래스선언.html

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() 을 사용하여 콜백함수를 등록해야함에 유의합니다.

Constructor

<aside>

FileStream()

File.arrayBuffer() 를 읽는 FileStream 을 생성합니다.

</aside>

Instance methods

<aside>

FileStream.read()

stream 에서 dataType 의 크기 만큼 byte 를 추출합니다. 추출한 byte 들을 dataType 으로 재해석하여 돌려줍니다.

</aside>

<aside>

FileStream.readString()

stream 에서 byteCount 만큼 byte 를 추출합니다. 추출한 byte 들을 textEncoding 으로 인코딩된 string 으로 재해석하여 돌려줍니다.

</aside>

<aside>

FileStream.ignore()

stream 에서 byteCount 만큼 byte 를 추출하고 폐기합니다.

</aside>

Instance properties

<aside>

FileStream.readBytes

현재까지 읽은 byte 의 갯수.

</aside>

Helper functions

<aside>

toFloat(), toDouble(), toInt8(), toInt16(), toInt32(), toInt64(), toUint8(), toUint16(), toUint32(), toUint64(), toVector2f(), toVector3f(), toVector4f(), toVector2(), toVector3(), toVector4()

arrayBuffer 에 저장된 바이트들을 특정 타입으로 해석하여 돌려줍니다.

</aside>

<aside>

toUtf8String(), toUtf16String(), toShiftJisString()

arrayBuffer 에 저장된 바이트들을 string 으로 해석하여 돌려줍니다.

</aside>

<aside>

sizeof()

인자로 준 DataType 의 byte 갯수를 얻습니다.

</aside>