Dal nodo docs sulla creazione di array tipizzati da buffer: memoriaCreazione di un array tipizzato da una matrice di byte memorizzato come nodo Buffer
del tampone viene interpretato come una matrice, non una matrice di byte. Che è ,
new Uint32Array(new Buffer([1,2,3,4]))
crea un elemento 4Uint32Array
con elementi[1,2,3,4]
, non unUint32Array
con un unico elemento[0x1020304]
o[0x4030201]
.
Ciò contrasta a JavaScript pianura, dove si crea una vista matrice tipizzata da un'ArrayBuffer utilizza la memoria del ArrayBuffer come byte (come un reinterpret_cast
in C++). Ho bisogno di questo comportamento nel nodo quando si opera su Buffer di nodo.
Potrei convertire il buffer in un ArrayBuffer, ma questo è troppo lento per la mia applicazione. (Ho provato molti metodi - ma sono tutti O (n).) (Modifica: il metodo più veloce che ho trovato è this, che è un singolo memmove op e abbastanza veloce, ma ha ancora almeno un momentaneo 2x consumo di memoria fino al rilascio del riferimento al buffer originale.
C'è un modo (veloce/O (1) per ottenere un array tipizzato da un buffer, utilizzando il contenuto del buffer come byte anziché elementi? (La dimensione dell'elemento dell'array tipizzato richiesto è> 1 byte, manco a dirlo.)
Che tipo di operazione deve fare con l'array? Se è di sola lettura, allora perché non fare riferimento agli elementi nel buffer direttamente attraverso l'offset? Es .: 'buf.readUInt32LE (i * 4)' dove 'i' è l'indice dell'array? –
Ho bisogno di scorrere l'array rapidamente e ripetutamente. I metodi 'read *' sono molto lenti. – ZachB
Penso che non ci sia posto più rapidamente: se abbiamo bisogno di un valore Int32 dell'indice 'i':' var k = i * 4; return buf [k] | buf [k + 1] << 8 | buf [k + 2] << 16 | buf [k + 3] << 256; ' –