Java 正在获取psx游戏的游戏ID
我想知道从.iso或.cue+.bin格式的磁盘映像中获取标题的最佳方式是什么, 是否有任何java库可以这样做,或者我应该从文件头读取 更新: 我设法做到了,我对PSX ISOs标题特别感兴趣。它有10个字节长,这是读取它的示例代码:Java 正在获取psx游戏的游戏ID,java,android,Java,Android,我想知道从.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) {
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();
File f=新文件(“cdimage2.bin”);
FileInputStream fin=新的FileInputStream(f);
财政司司长(37696);
int i=0;
而(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;
}
私有字符串getPSXId(文件f){
文件输入流鳍;
试一试{
fin=新文件输入流(f);
财政司司长(32768);
字节[]缓冲区=新字节[4096];
长启动=System.currentTimeMillis();
while(fin.read(缓冲区)!=-1){
字符串缓冲=新字符串(缓冲区);
if(buffered.contains(“BOOT=cdrom:\\”){
字符串tmp=“”;
int lidx=buffered.lastIndexOf(“BOOT=cdrom:\\”)+14;
对于(int i=0;i<11;i++){
tmp+=缓冲字符(lidx+i);
}
长时间运行=System.currentTimeMillis()-开始;
//System.out.println(“BOOT=cdrom:\\”+tmp);
tmp=tmp.toUpperCase().replace(“.”,“”)。replace(““,“-”);
fin.close();
返回tmp;
}
}
fin.close();
}catch(filenotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回null;
}
在2048字节块(卷描述符)中32768字节(ISO9660未使用)之后开始读取。第一个字节决定描述符的类型,1
表示主卷描述符
,在前7个字节后包含标题(总是\x01CD001\x01
)。下一个字节是NUL(\x00
),后面是32字节的系统标识符和32字节的卷标识符,后者通常被称为title并显示为title。请参阅以获得更详细的描述。我对PSX isos特别感兴趣,我发现标题长度为10字节,从字节37696开始