Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在NodeJs中编写Java.class文件(保留幻数)_Java_Android_Node.js_Magic Numbers - Fatal编程技术网

在NodeJs中编写Java.class文件(保留幻数)

在NodeJs中编写Java.class文件(保留幻数),java,android,node.js,magic-numbers,Java,Android,Node.js,Magic Numbers,我有一个替换文件中某些字符串的服务器。看起来是这样的: 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.w

我有一个替换文件中某些字符串的服务器。看起来是这样的:

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类型/编码更改来工作


如何确保在替换字符串时保留Mime类型?我注意到有很多库可以读取mimetype,但(到目前为止)我还没有找到一个库可以执行相反的操作。

这是因为
。class
文件是二进制的。您正在以UTF-8字符串的形式读取中的文件。因此,当您将其写回时,它将其写为格式错误的UTF-8字符串(因此更改了幻数)

只要不尝试替换多字节字符,就可以更改

var data = fs.readFileSync(file, 'utf-8');


它应该可以像您期望的那样工作。

在写入文件时,我得到了:“错误:未知编码”。我知道有很多方法可以使用库()对文件进行“编码”,但这需要编码吗?您可能知道要使用什么编码吗?您使用的是什么版本的node?您也可以尝试使用我现在在回答中包含的
fs.writeFileSync
。只需使用“binary”而不是{encoding:'binary}就可以修复它>执行的代码。但是在编译代码时,我得到了以下错误:“未知标记字节:6f”(而不是3f,对于一些文件也是54和3f)。知道为什么会这样吗?另外,我在节点10上,我不熟悉Java
.class
格式。也许它存储的字符串前面有一个长度值,而您使字符串变大或变小,但不更新长度值?因此,它最终读取字符串的过去或内部,并找到一个意外的字节值?JAVA是ISO 8859-1,带有\uxxx转义序列,表示Unicode BMP字符。代理项范围内\uxxx转义序列的连续对(如UTF-16中的转义序列)表示BMP之外的Unicode字符-
var data = fs.readFileSync(file, 'binary');
fs.writeFileSync(file, data);
fs.writeFileSync(file, data, { encoding: 'binary' });
fs.writeFileSync(file, new Buffer(data, 'binary'));