我想知道哪种是从.iso或.cue + .bin格式的磁盘映像中获取标题的最佳方法, 是否有任何java库可以执行此操作或应该从文件头读取?
更新 我设法做到了,我对PSX ISOs标题特别感兴趣。它长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();
UPDATE2:此方法更好:
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;
}
答案 0 :(得分:2)
在2048字节块(卷描述符)中,在32768字节(ISO9660未使用)之后开始读取。第一个字节确定描述符的类型,1
表示Primary Volume Descriptor
,其中包含前7个字节后的标题(始终为\x01CD001\x01
)。下一个字节是NUL(\x00
),后跟32个字节的系统和32个字节的卷标识符,后者通常已知并显示为标题。有关更详细的说明,请参阅http://alumnus.caltech.edu/~pje/iso9660.html。