我需要在java中自解压.exe文件的最后22个字节作为中心目录的结尾(没有命令行,请不要终端解决方案)。我尝试使用bufferInputStream读取.exe文件的内容并获得成功但是在尝试使用
获取最后22个字节时BufferInputStream.read(byteArray, 8170, 22);
java正在提出异常,说它是封闭的流。在这方面的任何帮助将非常感激。感谢。
答案 0 :(得分: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);
答案 1 :(得分: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();
}
答案 2 :(得分:-1)
给出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);