我需要以下问题的帮助:

我有两种不同的eclipse产品,它们使用linux可执行文件所在的同一个包,但是使用与目标平台不同的eclipse插件(3.5和3.7)。两者都运行:

Java(TM) SE Runtime Environment (build 1.7.0_04-ea-b06)


在32位Debian系统上。

这两个应用程序都使用bundle.getEntry()从捆绑软件中提取可执行文件,并通过FileInputStream-> FileWriter将其放入目录中。

然后可执行文件被调用。在一种情况下,它可以完美工作,而另一种则不能。对于版本3.5(工作情况),$:file myFile表示以下内容:

ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not stripped


对于版本3.7(无效的情况),$:file myFile表示以下内容:

ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), corrupted program header size, corrupted section header size


他们使用相同的OS,JRE和Bundle,但是什么破坏了我的ELF元数据呢?
我不知道其他地方。这是Java问题吗?日食?图书馆?

这里是复制方法:

URL url = bundle.getBundle(path);
inputStream = url.openStream();
FileWriter fileWriter = new FileWriter(path);

int in;
while ((in = inputStream.read()) != -1)
fileWriter.write(in);

inputStream.close();
fileWriter.close();

new File(path).setExecutable(true, false);

最佳答案

您不应将FileWriter用于二进制数据。请改用FileOutputStream

ReaderWriter用于文本数据,它们用于char,而InputStreamOutputStream用于二进制数据,它们用于bytechar和字节之间的转换是通过应用适当的字符编码发生的,它可能损坏通过FileWriter传递的二进制数据。

关于java - 从 eclipse 包中提取后损坏的ELF header /节,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10686600/

10-10 19:32