在 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'));

它应该会像您预期的那样工作。