2017-05-03 14 views
0

는 왜입니까? 왜 이것이 효과가있는 것 같습니까?노드 fs.readFileSync는 원시 버퍼 배열 대신 uInt8 배열을 반환합니까? <pre><code>var myArrayBuffer = fs.readFileSync(file, null) </code></pre> <p></p> 대신 단지 arrayBuffer의 UINT8 배열을 반환 :

var myArrayBuffer = fs.readFileSync(file, null).buffer; 
var myAArray = new Uint16Array(myArrayBuffer.slice(266,(sizeofArray*sizeOfArrayElement)); 

왜 fs.readFile은 내 파일을 uInt8 배열로 파싱합니까? 의미가 없으므로 파일에는 1 바이트 길이가 아닌 여러 데이터 유형이 있습니다.

답변

1

v3.0.0 이후 Buffer 클래스는 Uint8Array 클래스를 상속합니다. the doc 인용 :

Buffer 경우도 Uint8Array 인스턴스입니다. ArrayBuffer#slice()이 조각의 복사본을 생성, Buffer#slice()의 구현이 훨씬 더 효율적으로 Buffer#slice()을 복사하지 않고 기존 Buffer를 통해 뷰를 작성하는 동안 그러나, 예를 들어, ECMAScript를 2015 년에 TypedArray 사양 미묘한 호환성이있다. 가 TypeArray.buffer 객체의 속성을 이용하여 TypedArray 인스턴스와 같은 할당 된 메모리를 공유하는 새로운 Buffer를 만들기 위해 [...]

것이 가능하다.

... 정확히 예제에서 수행 한 내용입니다.

+0

하지만 왜 누군가는 uInt8Array를 필요로합니까? 파일을 버퍼로 직접 읽고 바이트를 처리합니까? 바이너리 파일을 읽는다면 그 모든 가능성이 희박 해지고 오버 헤드가 추가되고, 제 경우에는 혼란과 좌절감이 생깁니다. – LrakWortep

+0

여기에 무슨 뜻인지 확실하지 않습니다. 네,'Buffer' 또한'Uint8Array'입니다 -하지만 이전 버전으로 사용할 필요는 없습니다. – raina77ow

+0

너무 혼란 스러워요.) 버퍼의 크기가 uint8Array.slice (266, length)로 인해 Uint8array 인덱스가 두 배로 커지기 때문에 buffer doesnt는 uint8Array로 보입니다. 오버 헤드가 추가 된 것처럼 보입니다. – LrakWortep