Non riesco a riscrivere un file che sto ricevendo da un buffer binario, ho controllato con il file originale e tutti i byte sono uguali.Buffer binario di scrittura NodeJS in un file
Questo è il file creare dal NodeJS:
# hd test.txt | head
00000000 47 49 46 38 39 61 32 00 32 00 f7 00 00 96 8c 73 |GIF89a2.2.�....s|
00000010 66 5e 45 c6 bb 9f 7b 72 5a 47 47 47 8a 81 65 ca |f^Eƻ.{rZGGG..e�|
00000020 c1 a6 c9 c1 ac ee ea dd c8 c5 bc 8c 87 7a d3 c9 |���������ż..z��|
00000030 ab 43 3b 26 eb e5 d1 fa fa fa e5 e4 e2 a6 9d 83 |�C;&����������..|
00000040 86 7e 67 c1 b4 8e e4 dc c6 82 82 82 e1 dd d1 e3 |.~g��.���...����|
00000050 dd ca e4 da bc f5 f1 e6 26 25 25 9c 91 73 f8 f3 |���ڼ���&%%..s��|
00000060 e4 c3 b9 9d d3 ca b4 4a 42 2a d1 c6 a2 6c 62 46 |�ù.�ʴJB*�ƢlbF|
00000070 ea e6 db bb b3 9c db d3 bb 5c 54 3d f1 ee e6 dc |��ۻ�.�ӻ\T=����|
00000080 da d3 e7 e4 dc ce c2 9f f8 f6 f2 76 6c 53 fc fb |�������.���vlS��|
00000090 f9 e9 e1 ca 17 13 09 67 4d 00 f8 f4 e8 dc d3 b5 |����...gM.����ӵ|
Questo quella originale:
$ hd runner_small.gif | head
00000000 47 49 46 38 39 61 32 00 32 00 f7 00 00 96 8c 73 |GIF89a2.2......s|
00000010 66 5e 45 c6 bb 9f 7b 72 5a 47 47 47 8a 81 65 ca |f^E...{rZGGG..e.|
00000020 c1 a6 c9 c1 ac ee ea dd c8 c5 bc 8c 87 7a d3 c9 |.............z..|
00000030 ab 43 3b 26 eb e5 d1 fa fa fa e5 e4 e2 a6 9d 83 |.C;&............|
00000040 86 7e 67 c1 b4 8e e4 dc c6 82 82 82 e1 dd d1 e3 |.~g.............|
00000050 dd ca e4 da bc f5 f1 e6 26 25 25 9c 91 73 f8 f3 |........&%%..s..|
00000060 e4 c3 b9 9d d3 ca b4 4a 42 2a d1 c6 a2 6c 62 46 |.......JB*...lbF|
00000070 ea e6 db bb b3 9c db d3 bb 5c 54 3d f1 ee e6 dc |.........\T=....|
00000080 da d3 e7 e4 dc ce c2 9f f8 f6 f2 76 6c 53 fc fb |...........vlS..|
00000090 f9 e9 e1 ca 17 13 09 67 4d 00 f8 f4 e8 dc d3 b5 |.......gM.......|
È possibile confrontare questi due file e ogni byte sono la stessa cosa, sto indovinando che la codifica da NodeJS non è quello giusto.
Questo è il pezzo di codice
var foo = "71%73%70%56%57%97%50%0%50%0%247%0%0%150%140%115%102%94%69%198%187%159%123%114%90%71%71%71%138%129%101%202%193%166%201%193%172%238%234%221%200%197%188%140$
var bytes = foo.split("%");
var b = new Buffer(bytes.length);
for (var i = 0;i < bytes.length;i++) {
b[i] = bytes[i];
}
fs.writeFile("test.txt", b, "binary",function(err) {
if(err) {
console.log(err);
} else {
console.log("The file was saved!");
}
});
Si può cercare di farlo funzionare sui vostri NodeJS e vedere che il risultato è sbagliato.
Cosa posso fare per risolverlo?
La tua domanda non è chiara. Stai copiando un file binario in nodejs e la copia è identica al byte dell'originale? Qual è la tua domanda allora, sembra che stia funzionando bene. – PherricOxide
Sì, la scrittura di questi byte funziona ma se si controlla la differenza tra i due file, è possibile vedere che ci sono alcuni QUESTION MARK al posto di point. Questo rende il file inutilizzabile perché non è possibile vedere l'immagine. Quello che sto pensando è che devo usare una codifica diversa – max246
Potrebbe essere solo l'editor esadecimale che mostra le cose in modo diverso perché le estensioni dei file sono diverse? Non c'è codifica con i byte grezzi (a meno di big endian contro little endian, che non sembra essere il tuo problema). – PherricOxide