我无法重写从二进制缓冲区获取的文件,我已与原始文件进行了检查,所有字节都相同。
这是从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.����ӵ|
这是最初的一个:
$ 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!");
}
});
你可以试着在你的节点上运行它,看看结果是错误的。
我能做些什么来修复它?
尝试使用缓冲区。字节长度(字符串|缓冲区..)来控制长度。
你可以试试这个:
var writeFileSync = 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 writeFileSync('path_to_your_file', your_buffer);
我不确定这是否会有帮助,但尝试将b变量更改为下面一行中的字节变量,至少您可以在测试编辑器中查看文件
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!");
}
});
下面的代码尝试使用缓冲区将WAV文件的头写入流,然后将其写入可写流。 出于某种原因,文件的前8个字节是错误的: 第一行应该是: 这条线路有故障: 它需要:
我正试图将大量数据写入我的SSD(固态驱动器)。我指的是80GB。 我浏览了网页寻找解决方案,但我想出的最好的办法是: 使用Visual Studio 2010编译并进行全面优化并在Windows7下运行,该程序的最大容量约为20MB/s。真正让我困扰的是,Windows可以以150MB/s到200MB/s之间的速度将文件从其他SSD复制到此SSD。所以至少快了7倍。这就是为什么我认为我应该能够走
本文向大家介绍如何将二进制NodeJS缓冲区转换为JavaScript ArrayBuffer?,包括了如何将二进制NodeJS缓冲区转换为JavaScript ArrayBuffer?的使用技巧和注意事项,需要的朋友参考一下 直接访问 buf.buffer属性,将二进制NodeJS Buffer转换为JavaScript ArrayBuffer。通过原始Buffer实例进行的写操作将写入Arra
问题内容: 在Python中,您可以将StringIO用作字符数据的文件状缓冲区。内存映射文件基本上对二进制数据执行类似的操作,但是它需要一个用作基础的文件。Python是否有一个用于二进制数据且仅是内存的文件对象,相当于Java的ByteArrayOutputStream? 我的用例是我想在内存中创建一个ZIP文件,而ZipFile需要一个类似文件的对象。 问题答案: 您可能正在寻找io.Byt
问题内容: 我有23位表示为字符串,并且需要将此字符串作为4个字节写入二进制文件。最后一个字节始终为0。以下代码有效(Python 3.3),但感觉不太好(我对Python和编程很陌生)。您有任何改善技巧吗?似乎for循环可能有用,但是如何在循环中进行切片而不出现IndexError?请注意,当我将位提取到一个字节中时,我会反转位顺序。 问题答案: 您可以将其视为int,然后按以下方式创建4个字节
我想以这种形式将短int x=0x4740写入二进制文件:0100 0000 0100 0111,当我在记事本中打开它时,它是@G。它正在工作。当我尝试编写例如短int a=0xf0ff;(二进制:1111 0000 1111 1111)时,记事本显示给我的不是我的数字二进制(➕是1100 1011 1001 1001 1100 0100 1001 0001)。如何在这个文件中编写它并获得1111