我需要以下问题的帮助:
我有两种不同的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
。Reader
和Writer
用于文本数据,它们用于char
,而InputStream
和OutputStream
用于二进制数据,它们用于byte
。 char
和字节之间的转换是通过应用适当的字符编码发生的,它可能损坏通过FileWriter
传递的二进制数据。
关于java - 从 eclipse 包中提取后损坏的ELF header /节,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10686600/