在 NodeJs 中写入 Java.class 文件(保留幻数)
Writing Java.class file in NodeJs (preserving magic number)
我有一个服务器可以替换文件中的一些字符串。它看起来像这样:
var stringToBeReplacedWith = "Cool text";
var data = fs.readFileSync(file, 'utf-8');
var RegExp = new RegExp("Stringtobereplaced", 'g'); // global search
data = fileContents.replace(RegExp, stringToBeReplacedWith);
fs.writeFileSync(file, data);
代码在 Mime-type/encoding 更改后起作用。
如何确保在替换字符串时保留 Mime-Type?我注意到有很多库可以读取 mimetype,但是(到目前为止)我还没有找到相反的库。
这是因为 .class
文件是二进制的。您正在以 UTF-8 字符串形式读取文件。因此,当您将其写回时,它会将其写为格式错误的 UTF-8 字符串(因此幻数发生变化)。
只要您不尝试替换多字节字符,就可以更改
var data = fs.readFileSync(file, 'utf-8');
至
var data = fs.readFileSync(file, 'binary');
和
fs.writeFileSync(file, data);
至
fs.writeFileSync(file, data, { encoding: 'binary' });
或
fs.writeFileSync(file, new Buffer(data, 'binary'));
它应该会像您预期的那样工作。
我有一个服务器可以替换文件中的一些字符串。它看起来像这样:
var stringToBeReplacedWith = "Cool text";
var data = fs.readFileSync(file, 'utf-8');
var RegExp = new RegExp("Stringtobereplaced", 'g'); // global search
data = fileContents.replace(RegExp, stringToBeReplacedWith);
fs.writeFileSync(file, data);
代码在 Mime-type/encoding 更改后起作用。
如何确保在替换字符串时保留 Mime-Type?我注意到有很多库可以读取 mimetype,但是(到目前为止)我还没有找到相反的库。
这是因为 .class
文件是二进制的。您正在以 UTF-8 字符串形式读取文件。因此,当您将其写回时,它会将其写为格式错误的 UTF-8 字符串(因此幻数发生变化)。
只要您不尝试替换多字节字符,就可以更改
var data = fs.readFileSync(file, 'utf-8');
至
var data = fs.readFileSync(file, 'binary');
和
fs.writeFileSync(file, data);
至
fs.writeFileSync(file, data, { encoding: 'binary' });
或
fs.writeFileSync(file, new Buffer(data, 'binary'));
它应该会像您预期的那样工作。