Non ci sono dipendenze, velocità moderata, qualsiasi versione di nodo Utilizzare Martin Thomson rispondere. che viene eseguito in O (n). (Vedi anche le mie risposte ai commenti sulla sua risposta su non-ottimizzazioni. Utilizzando un DataView è lenta. Anche se è necessario capovolgere byte, ci sono modi più veloci per farlo.) Buffer sono Uint8Arrays, quindi non vi resta che accedere al suo ArrayBuffer . Questo è O (1): La fetta e roba di offset è necessaria perché le piccole buffer (lt4096 byte, credo) sono punti di vista su un ArrayBuffer condiviso. Senza di essa si potrebbe finire con una contenente i dati da un altro ArrayBuffer TypedArray. È possibile utilizzare npmjspackagememcpy di andare in entrambe le direzioni (Buffer ArrayBuffer e ritorno). Il suo più veloce rispetto alle altre risposte pubblicate qui ed è una biblioteca ben scritto. Nodo 0,12 attraverso iojs 3.x richiede ngossens forcella (vedi questo). risposto Jul 13 15 a 22: 04Using buffer nel Node. js Introduzione puro JavaScript non gestisce i dati binari rettilinei molto bene, anche se JavaScript è Unicode amichevole. Quando si tratta di flussi TCP e la lettura e la scrittura per il file system, è necessario affrontare i flussi puramente binarie di dati. Il nodo ha diverse strategie per creare, gestire, e consumare ottetto (un ottetto può essere utilizzato per rappresentare i valori decimali che vanno da 0 a 255.) flussi. I dati grezzi vengono memorizzati in istanze della classe Buffer (che è progettato per gestire dati binari grezzo) nel nodo. Nota. Un ottetto è un'unità di informazioni digitali in informatica e telecomunicazioni che consistono di otto bit. Il termine è spesso usato quando il termine byte potrebbe essere ambiguo, come storicamente non c'era definizione standard per la dimensione del byte. Un buffer è una regione di memoria fisica utilizzata per memorizzare temporaneamente i dati mentre viene spostato da un luogo all'altro. Nel nodo, ogni buffer corrisponde a qualche ricordo crudo allocata al di fuori V8. Un buffer agisce come un array di interi, ma non può essere ridimensionato. La classe Buffer è globale. Si tratta di dati binari direttamente e può essere costruito in una varietà di modi. Nell'elenco Codifica, utilizzato con il nodo Conversione tra buffer e oggetti stringa JavaScript richiede un metodo di codifica esplicita. La seguente tabella mostra le differenti codifiche stringa. Valore di ritorno. Numero di ottetti scritto. Se non c'è abbastanza spazio nel buffer per adattare l'intera stringa, sarà scrivere una parte della stringa. Lasciate creare un buffer di dimensioni 15 octtets. Ora scrivere una stringa ad esso: Nell'esempio precedente, il primo argomento di buffer. write è la stringa (quotNode. jsquot) per scrivere nel buffer, e il secondo argomento è la codifica stringa (quotutf8quot). In questo caso, secondo argomento non è obbligatorio come quotutf8quot è la codifica di default. str1.write è tornato 7, cioè abbiamo scritto sette byte del buffer. La lunghezza della quotNode. jsquot stringa è anche sette. Ecco un altro esempio in cui abbiamo aggiunto tutte le tre argomenti, il secondo argomento indica un offset. Lettura da Buffer buf. toString (codifica, inizio, fine) Il buf. toString (codifica, inizio, fine) metodo di decodifica e restituisce una stringa dai dati del buffer. Qui in buf dati ha già scritto attraverso i buffer metodo di scrittura. Valore di ritorno. Una stringa. Nel seguente esempio abbiamo creato un buffer di dimensioni 15 ottetti, quindi scrivere una stringa Node. js. Il primo metodo toString () legge l'intero buffer e mostra alcuni caratteri nulli (u0000), dal momento che il buffer non contiene tutti i caratteri di testo. La seconda leggere i caratteri del buffer da 0 a 7 ° posizione e restituisce Node. js. la rappresentazione JSON. buf. toJSON () Il metodo buf. toJSON () viene utilizzato per ottenere il JSON-rappresentazione dell'istanza tampone, che è identica a quella di uscita per JSON array. Qui è un esempio. La dimensione del buffer di str1 era di 10 e lunghezza della stringa specificata è 7, quindi, gli ultimi tre valori all'interno della matrice mostra 0. Impostazione ottetto individuale. bufindex Il bufindex viene utilizzato per ottenere e impostare l'ottetto di indice. I valori si riferiscono ai singoli byte, la gamma legale è compreso tra hex 0x00 e 0xFF o 0 e 255. Nel seguente esempio, abbiamo inserito tre caratteri alla fine della stringa Node. js all'interno del buffer. Nota. Vedi i dettagli di charCodeAt Method () a qui. I test se un oggetto è un buffer - metodo di Buffer. isBuffer (obj) Buffer. isBuffer (obj) viene utilizzato per verificare se un oggetto in Node. js tampone oppure no. Valore di ritorno. Restituisce vero se l'oggetto è un tampone o false altrimenti. Tipo di valore. Booleano. Vedere i seguenti esempi: Actual lunghezza in byte di una stringa. Metodo Buffer. byteLength (str, encoding) Buffer. byteLength (stringa, codifica) viene utilizzato per ottenere la lunghezza in byte effettiva di una stringa con un dato di codifica. Valore di ritorno. Un buffer Se la lista non contiene elementi, o se il totalLength è 0, allora restituisce un buffer di lunghezza zero. Se la lista ha esattamente un elemento, quindi la prima voce della lista viene restituito. Se l'elenco ha più di un elemento, quindi viene creato un nuovo buffer. Se totalLength non viene fornito, viene letto dai buffer nella lista. Tuttavia, questo aggiunge un loop aggiuntivo alla funzione, quindi è più veloce per fornire la lunghezza esplicitamente. Vedere i seguenti esempi. La lunghezza del buffer1 è 4 e buffer2 sono 2. Nell'ultimo esempio abbiamo accennato la lunghezza totale dei buffer (5) quindi mostra Nodej non Nodejs. La lunghezza del buffer in byte - buf. length Il metodo buf. length viene utilizzato per ottenere la dimensione del buffer e rappresenta la quantità di memoria allocata. Non è la stessa della dimensione del contenuto buffer, poiché un buffer può un terzo pieno. Per esempio: la copia del buffer. buf. copy (targetBuffer, targetStart, sourceStart, sourceEnd) Il buf. copy (targetBuffer, targetStart, sourceStart, sourceEnd) metodo è utilizzato per copiare il contenuto di un buffer su dati another. Storing con Node. js flussi scrivibili Questo tutorial vi spiegherà come memorizzare dati con flussi scrivibili Node. js e su come creare il proprio flusso di scrivibile personalizzato. Informazioni sulla versione Autore: Jeff Barczewski Pubblicato: August 18th, 2013 Tags: nodejs, torrenti Livello: Intermedio Prerequisiti: tamponi, eventi, installare NPM moduli Node. js v0.10 (ultima versione stabile è v0.10.16 stesura di questo documento), ma i flussi sono stati generalmente una parte di Node. js dai suoi primi giorni Streams2 scrivibile classe astratta può essere utilizzato con le versioni precedenti (prima v0.10) del nodo utilizzando il modulo NPM leggibile-stream (testato con v1.0.15) Memorizzazione dati con scrivibile flussi di scrittura di file di testo l'esempio più semplice è solo in scrittura del testo utf8, dal momento che la codifica di default se si scrive stringhe è utf8. Se si desidera scrivere stringhe con una codifica diversa allora si può semplicemente modificare la linea createWriteStream o aggiungere la codifica di ogni processo di scrittura. Scrittura file binario Scrivi file binario è solo una questione di usare buffer anziché stringhe per la scrittura. Nel precedente esempio, io uso crypto. createRandomBytes () per creare un buffer di dati, ma è possibile utilizzare i dati binari che si crea o leggere da un'altra fonte altrettanto facilmente. Sapendo quando il file è stato scritto Ingresso e uscita sono operazioni asincrone in Node. js così che cosa, se vogliamo sapere quando un file è stato completamente scritto La risposta è di ascoltatori di configurazione agli eventi che il flusso emette. L'evento finitura (aggiunto in Node. js v0.10) indica che tutti i dati sono stati trasferiti al sistema sottostante. Su Node. js prima v0.10, si potrebbe aggiungere un cb al. end () per ottenere un'indicazione di quando che era stato lavato, tuttavia finitura tiene conto di eventuali altre trasformazioni a valle e così via. Creazione di flussi personalizzati Node. js scrivibili Quando è necessario creare il proprio flusso scrivibile personalizzata per memorizzare i dati in un database o altro impianto di stoccaggio, è facile se si utilizza la nuova classe astratta Streams2 scrivibile disponibile in modo nativo in Node. js 0.10 o via modulo polyfill NPM leggibile-stream. Per creare un flusso scrivibile che implementa tutte le comportamento normale flusso Node. js è sufficiente sottoclasse scrivibile e implementare scrittura (pezzo, la codifica, cb). La creazione di flusso di memoria scrivibile Ecco un esempio che sta scrivendo un semplice archivio dati in memoria. Stiamo usando il nome dato alla creazione del torrente come la chiave, e noi aggiungere dati al valore fino al termine. flussi scrivibili sono elegante e semplice da usare la scrittura del testo o dati binari per Node. js flussi è senza sforzo, e anche la creazione di flussi di scrivibili personalizzato completamente funzionale è una passeggiata nel parco con la nuova funzionalità introdotta in streams2 Node. js v0.10 (o utilizzando il modulo leggibile-stream polyfill). Per ulteriori lettura Condividi questo javascript puro altoPerché Buffer, mentre grande con stringhe Unicode-encoded, non gestisce i dati binari rettilinei molto bene. Questo va bene sul browser, dove la maggior parte dei dati è in forma di stringhe. Tuttavia, Node. js server hanno a che fare anche con i flussi TCP e la lettura e la scrittura al filesystem, sia che rendono necessario per svolgere con i flussi puramente binarie di dati. Un modo per gestire questo problema è di utilizzare solo le stringhe in ogni caso. che è esattamente ciò Node. js ha fatto in un primo momento. Tuttavia, questo approccio è estremamente problematico per lavorare con il suo lento, ti fa lavorare con una API progettate per archi e dati non binari, e ha la tendenza a rompersi in modi strani e misteriosi. Dont utilizzare stringhe binarie. Usare tamponi invece Quali sono Buffer buffer sono istanze della classe Buffer nel nodo, che è stato progettato per gestire dati binari originari. Ogni buffer corrisponde ad una certa memoria allocata prime al di fuori V8. Buffer agire un po 'come gli array di interi, ma arent ridimensionabile e hanno un sacco di metodi specificamente per i dati binari. Inoltre, i numeri interi in un buffer rappresentano ognuno un byte e quindi sono limitati a valori da 0 a 255 (28 - 1), inclusi. Dove si vede buffer: In natura, i buffer sono di solito visto nel contesto di dati binari provenienti da corsi d'acqua, come ad esempio fs. createReadStream. Creazione di buffer: Ci sono alcuni modi per creare nuovi buffer: Questo buffer non è inizializzato e contiene 8 byte. Questo inizializza il buffer il contenuto di questa matrice. Tenete a mente che il contenuto della matrice sono interi che rappresentano byte. Questo inizializza il buffer ad una codifica binaria della prima stringa come specificato dal secondo argomento (in questo caso, utf-8). utf-8 è di gran lunga la codifica più comune utilizzato con il nodo, ma Buffer supporta anche: ASCII. Questa codifica è modo veloce, ma è limitato al set di caratteri ASCII. Inoltre, si convertirà caratteri nulli in spazi, a differenza della codifica utf-8. UCS2. A due byte, codifica little-endian. Può codificare un sottoinsieme di unicode. Base64. Base64 codifica stringa. binario. Questo è il formato stringa binaria accennato in precedenza, ed è in fase di obsoleto. Evitare l'uso. Scrivendo a buffer Dato che esiste già un buffer creato: possiamo iniziare a scrivere stringhe ad esso: Il primo argomento al buffer. scrittura è la stringa di scrivere nel buffer, e il secondo argomento è la codifica stringa. Succede a default utf-8 in modo tale argomento è estranea. buffer. scrittura tornato 5. Questo significa che abbiamo scritto a cinque byte del buffer. Il fatto che la stringa Ciao è anche lunga 5 caratteri è casuale, dal momento che ogni personaggio è capitato di essere 8 bit a testa. Questo è utile se si desidera completare il messaggio: Quando il buffer. scrittura ha 3 argomenti, il secondo argomento indica un offset, o indice del buffer per iniziare a scrivere a. La lettura da Buffer: Probabilmente il modo più comune di leggere buffer è quello di utilizzare il metodo toString, dal momento che molti buffer contengono testo: Anche in questo caso, il primo argomento è la codifica. In questo caso, si può notare che non l'intero buffer è stata utilizzata per fortuna, perché sappiamo quanti byte weve scritto nel buffer, si può semplicemente aggiungere ulteriori argomenti alla stringa i thats fetta davvero interessante: ottetti individuali: È anche possibile impostare singoli bit utilizzando una sintassi di array come: In questo esempio, ho impostato i byte rimanenti, a mano, in modo tale che essi rappresentano utf-8 codificato e 1 caratteri. Più divertimento con buffer Buffer. isBuffer (oggetto) Questo metodo controlla se oggetto è un buffer, simile a Array. isArray. Buffer. byteLength (stringa, encoding) Con questa funzione, è possibile verificare il numero di byte necessari per codificare una stringa con una data di codifica (che di default è UTF-8). Questa lunghezza non è la stessa lunghezza della stringa, poiché molti caratteri richiedono più byte per codificare. Per esempio: Il pupazzo di neve unicode è solo carattere, ma prende 3 interi byte per codificare buffer. length Questa è la lunghezza del buffer, e rappresenta la quantità di memoria allocata. Non è la stessa della dimensione del contenuto buffer, poiché un buffer può essere mezzo pieno. Ad esempio: In questo esempio, i contenuti scritti nel buffer costituiti solo da tre gruppi (poiché rappresentano la pupazzo singolo carattere), ma la lunghezza buffer è ancora 16, come è stato inizializzato. buffer. copy (target, targetStart0, sourceStart0, sourceEndbuffer. length) buffer. copy permette di copiare il contenuto di un buffer su un altro. Il primo argomento è il buffer di destinazione su cui copiare il contenuto del buffer. e il resto degli argomenti consentono per copiare solo una sottosezione del buffer di origine da qualche parte nel mezzo del buffer di destinazione. Per esempio: In questo esempio, ho copiato il buffer pupazzo di neve, che contiene un carattere lungo 3 byte nel buffer gelido, a cui avevo scritto ai primi 16 byte. Perché il personaggio pupazzo di neve è lungo 3 byte, il risultato occupa 19 byte del buffer. buffer. slice (inizio, endbuffer. length) Questo metodo API è generalmente la stessa di quella di Array. prototipo. fetta. ma con una differenza di importazione molto: La fetta non è un nuovo buffer e semplicemente riferimento a un sottoinsieme dello spazio di memoria. Modificando la fetta anche modificare il buffer originale. Per esempio: Ora gelido è stata trasformata in una pozza di sottolineatura. Bummer.
No comments:
Post a Comment