Um dies aus den Kommentaren zu bewegen,
Die Lösung, die Sie suchen sind, ist wahrscheinlich so etwas wie folgt aus:
const line = '16 03 03 00 50 40 f2 12 71 0b c0 4f 99 dc 87 6f';
const regex =//g;
const encoding = 'hex';
const replacement = '';
function getHexString(input) {
return input.replace(regex, replacement);
}
const existingBuffer = Buffer.alloc(1024); // just as an example
const offset = existingBuffer.length; // or wherever you need them to go.
function write(buffer, str, pos) {
const hexString = getHexString(str);
buffer.write(hexString, pos, encoding);
}
write(existingBuffer, line, 0);
Ich kann über 1,600,000 ops/sec
durch benchmark.js mit () => write(existingBuffer, line, 0)
bekommen. Ein bisschen betrügen, da ich ständig auf Position 0
schreibe, anstatt anzuhängen, aber es sollte nahe genug sein, um dir eine Idee zu geben. Der nächste, den ich mit anderen Kombinationen, die ich versuchte, kommen könnte, war ungefähr 1,200,000 ops/sec
.
Auch als eine Randnotiz, würde ich stark empfehlen Buffer.alloc()
wo immer Sie Ihren ursprünglichen Puffer erstellen, wenn Sie nicht sind. Sie können auch Buffer.allocUnsafe()
verwenden, was zwar schneller ist, aber möglicherweise Daten ungleich Null im Puffer hinterlässt. Das kann in Ordnung sein, wenn Sie wissen, dass Sie den gesamten Puffer mit neuen Daten füllen werden, bevor Sie ihn verwenden (oder nur bekannte Slices verwenden). Mehr lesen here.
Vorsicht bei der Verwendung von '.replace ('', '')', das wird nur die erste Instanz von '' ''entfernen. Wahrscheinlich willst du 'str.replace (/ \ s +/g, '');' oder etwas ähnliches. Ich kann jedoch nicht mit seiner Leistung sprechen. Außerdem sollten Sie sicherstellen, dass Sie 'new Buffer (str, 'hex');' verwenden, damit der neue Puffer weiß, wie die Zeichenkette kodiert ist. – dvlsg
@dvlsg danke, ich habe meine Antwort mit Ihren Vorschlägen bearbeitet . Mein JS ist rostig und ich habe den Code nicht wirklich getestet. Der Grund für den 'existierenden' Puffer ist, dass ich diese Byte-Hex-Zeilen zusammen "anhefte". – makhdumi
Fair genug. Wenn Sie '.write (hexString, startPosition, 'hex')' oder 'Buffer.concat ([existingBuffer, newBuffer])' verwenden (sobald Sie den neuen Puffer aus der hexadezimalen Kette haben), dann ist es wahrscheinlich Ihre beste Wette. Ich stelle mir vor, dass die "concat" -Lösung einen völlig neuen "Buffer" macht, wenn die Speicherauslastung immer noch ein Problem ist. – dvlsg