ArrayBuffer를 볼 수 있는 뷰로, 버퍼의 이진 데이터를 읽거나 쓸 수 있게 한다.
ArrayBuffer는 단순히 메모리 블록을 나타내지만,
DataView는 이를 다루기 위한 API를 제공little-endian과 bigendian 바이트 순서를 지원한다.
다양한 플랫폼에서 작동하는 이진 데이터를 해적하고 조작하는데 유용하다.
파라미터
: ArrayBuffer 인스턴스, offset 바이트(선택), view 하려는 Bytelength(선택)const buffer = new ArrayBuffer(4); const obj = new Int8Array(buffer); obj.set([10,20,30,40]); const view = new DataView(buffer, 1, 2); // [20, 30] console.log(view.getInt8(0)); // 20
getInt8
,getUint8
,getInt16
,getUint16
,getInt32
,getUint32
,getFloat32
,getFloat64
이 메소드들은 각각 8, 16, 32비트 정수와 32, 64비트 부동 소수점 숫자를 읽는데 사용됩니다.
파라미터
: byteOffset,const buffer = new ArrayBuffer(4); const obj = new Int8Array(buffer); obj.set([10,20,30,40]); const view = new DataView(buffer, 1, 2); console.log(view,getInt8(0)); // 20 view.setInt8(1,70); // 원본 값 obj 도 바뀐다. console.log(view.getInt8(1)); // 70 console.log(obj); // {0: 10, 1: 20, 2: 70, 3: 40}
setInt8
,setUint8
,setInt16
,setUint16
,setInt32
,setUint32
,setFloat32
,setFloat64
이 메소드들은 각각 8, 16, 32비트 정수와 32, 64비트 부동 소수점 숫자를 쓰는데 사용됩니다.
16 이상 부터 엔디언 타입을 제어할 수 있다.
파라미터
: byteOffset, 설정할 값, 엔디언 타입(True|False, true면 리틀, false면 빅, 기본값 false)const buffer = new ArrayBuffer(4); const view = new DataView(buffer, 1, 2); view.setInt(0,20); console.log(view.getInt8(0)); // 20
DataView
인스턴스와 연결된ArrayBuffer
오프센 바이트 값
new DataView(buffer, 1)
에서 두번째 파라미터에 작성한 값
view 바이트 수
new DataView(buffer, 1, 2)
의 세번째 파라미터에 작성한 값
16진수 4바이트로 구성된 0x12 0x34 0x56 0x78 을
엔디언 구분에 따라 배치해보자
0x12 0x34 0x56 0x78
앞에서 부터 배치
TCP/IP 전송, Intel CPU 에서 사용
0x78 0x56 0x34 0x12
뒤에서 부터 배치
IBM CPU 에서 사용
0x34 0x12 0x78 0x56
앞뒤를 섞어서 배치