Получение идентификатора игры psx-игры
Мне было интересно, какой лучший способ получить заголовок из образа диска в формате.iso или.cue +.bin. Есть ли какая-либо библиотека java, которая может это сделать, или мне следует читать из заголовка файла?
ОБНОВЛЕНИЕ: мне удалось сделать это, я особенно интересовался названием PSX ISO. Это 10 байт, и это пример кода для чтения:
File f = new File("cdimage2.bin");
FileInputStream fin = new FileInputStream(f);
fin.skip(37696);
int i = 0;
while (i < 10) {
System.out.print((char) fin.read());
i++;
}
System.out.println();
ОБНОВЛЕНИЕ 2: Этот метод лучше:
private String getPSXId(File f) {
FileInputStream fin;
try {
fin = new FileInputStream(f);
fin.skip(32768);
byte[] buffer = new byte[4096];
long start = System.currentTimeMillis();
while (fin.read(buffer) != -1) {
String buffered = new String(buffer);
if (buffered.contains("BOOT = cdrom:\\")) {
String tmp = "";
int lidx = buffered.lastIndexOf("BOOT = cdrom:\\") + 14;
for (int i = 0; i < 11; i++) {
tmp += buffered.charAt(lidx + i);
}
long elapsed = System.currentTimeMillis() - start;
// System.out.println("BOOT = cdrom:\\" + tmp);
tmp = tmp.toUpperCase().replace(".", "").replace("_", "-");
fin.close();
return tmp;
}
}
fin.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
1 ответ
Просто начните чтение после 32768 байт (не используется ISO9660) из 2048 байт (дескриптор тома). Первый байт определяет тип дескриптора, и 1
средства Primary Volume Descriptor
, которые содержат заголовок после первых 7 байтов (которые всегда \x01CD001\x01
). Следующий байт - NUL (\x00
) и за ним следуют 32 байта системы и 32 байта идентификатора тома, последний обычно известен и отображается как заголовок. См. http://alumnus.caltech.edu/~pje/iso9660.html для более подробного описания.