Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在获取psx游戏的游戏ID_Java_Android - Fatal编程技术网

Java 正在获取psx游戏的游戏ID

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) {

我想知道从.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();
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开始