2

Javaで自己解凍.exeファイルの中央ディレクトリの終わりとして最後の22バイトを取得する必要があります(コマンドラインなし、ターミナルソリューションなしでお願いします)。bufferInputStream を使用して .exe ファイルの内容を読み取ろうとしたところ、成功しましたが、最後の 22 バイトを取得しようとすると

BufferInputStream.read(byteArray, 8170, 22);

java がストリームを閉じているという例外を発生させています。ありがとう。

4

3 に答える 3

5

私はこれを試したことはありませんが、MappedByteBuffer を使用して最後の 22 バイトだけを読み取ることができると思います。

File file = new File("/path/to/my/file.bin");

long size = file.length();
FileChannel channel = FileChannel.open(file.toPath(), StandardOpenOption.READ);
MappedByteBuffer buffer = channel.map(MapMode.READ_ONLY, size-22, 22);

次に、バッファを配列にフラッシュするだけです。

byte[] payload = new byte[22];
buffer.get(payload);
于 2015-11-25T12:25:44.647 に答える
0

まず、ファイルから FileInputStream を作成する必要があります。

File exeFile = new File("path/to/your/exe");
long size = exeFile.length();
int readSize = 22;
try {
    FileInputStream stream = new FileInputStream(exeFile);
    stream.skip(size - readSize);
    byte[] buffer = new byte[readSize];
    if(stream.read(buffer) > 0) {
        // process your data
    }
    else {
        // Some errors
    }
    stream.close();
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}
于 2015-11-25T12:14:36.627 に答える