如何在java中获取.exe文件的最后'n'字节?



我需要在java中的自解压.exe文件中获取最后22个字节作为中心目录的末尾(没有命令行,请不要使用终端解决方案)。我尝试使用bufferInputStream读取.exe文件的内容,并获得了成功,但当尝试使用获取最后22个字节时

BufferInputStream.read(byteArray, 8170, 22);

java正在引发异常,称其为闭流。如能在这方面提供任何帮助,我们将不胜感激。谢谢

我还没有尝试过,但我想您可以使用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);

您首先需要从文件创建一个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();
}

给出java.io.IOException:Stream Closed的代码示例您必须在之前检查输入流

    InputStream fis = new FileInputStream("c:/myfile.exe");
    fis.close(); // only for demonstrating
    // correct but useless
     BufferedInputStream bis = new BufferedInputStream(fis);        
    byte x[]=new byte[100];
    // EXCEPTION: HERE: if fis closed
    bis.read(x,10,10);

相关内容

  • 没有找到相关文章

最新更新