NodeJS将二进制缓冲区写入文件

我无法重写从二进制缓冲区获取的文件,我检查了原始文件,所有字节都是相同的。

这是从NodeJS创build的文件:

# 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.    ӵ| 

这是原来的一个:

 $ 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.......| 

你可以比较这两个文件,每个字节都是一样的,我猜测NodeJS的编码是不正确的。

这是一段代码

 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!"); } }); 

你可以尝试在你的NodeJS上运行它,并看到结果是错误的。

我能做些什么来解决它?

我不知道这是否会有所帮助,但是尝试将bvariables更改为下面一行中的bytesvariables,至less您可以在testing编辑器中查看该文件

fs.writeFile("test.txt", b, "binary",function(err) { });

如果你想分开的数字空间尝试下面的代码:

 var fs = require('fs'); 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); var c = ""; for (var i = 0;i < bytes.length;i++) { b[i] = bytes[i]; c = c + " " + bytes[i] } fs.writeFile("test.txt", c, "binary",function(err) { if(err) { console.log(err); } else { console.log("The file was saved!"); } }); 

你可以试试这个:

 var writeFile = function (path, buffer, permission) { permission = permission || 438; // 0666 var fileDescriptor; try { fileDescriptor = fs.openSync(path, 'w', permission); } catch (e) { fs.chmodSync(path, permission); fileDescriptor = fs.openSync(path, 'w', permission); } if (fileDescriptor) { fs.writeSync(fileDescriptor, buffer, 0, buffer.length, 0); fs.closeSync(fileDescriptor); } } // then writeFile('path_to_your_file', your_buffer);