1

次の問題についてサポートが必要です。

2つの異なる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、バンドルを使用していますが、ELF-メタデータを破壊しているのは何ですか?私は他に見るべき場所を知りません。Javaの問題ですか?Eclipse?図書館?

ここにコピー方法があります:

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);
4

1 に答える 1

1

FileWriterバイナリデータには使用しないでください。FileOutputStream代わりに使用してください。

ReadersとWritersはテキストデータ用でありchar、sで機能しますが、 InputStreamsとOutputStreamsはバイナリデータ用であり、 bytesで機能します。sとbytesの間の変換はchar、適切な文字エンコードを適用することによって行われ、を通過するバイナリデータに損傷を与える可能性がありますFileWriter

于 2012-05-21T15:40:07.243 に答える