0

I am trying to make a program that reads the PS3 PARAM.SFO file in java. I am having trouble reading the shorts and the ints. I think they are backwards in the PARAM.SFO file. Here's the code I have.

if(isOpen())
    close();
        
file = new File(path);
        
String mode = "rw";
if(!file.canWrite())
    mode = "r";
        
raf = new RandomAccessFile(path, mode);
        
byte[] mgc = new byte[4];
raf.read(mgc);
magic = new String(mgc, StandardCharsets.UTF_8);
        
if(magic.compareTo("\0PSF") != 0)
    throw new IOException("Not a valid param.sfo file");
        
majorVersion = raf.readByte();
minorVersion = raf.readByte();
reserved1 = raf.readShort();
keysOffset = raf.readInt();
valuesOffset = raf.readInt();

itemCount = raf.readInt();
        
items = new ArrayList<ParamSfoEntry>();
        
for(int i = 0; i < itemCount; i++)
     items.add(new ParamSfoEntry(raf, this, i));

Here is a screenshot of PARAM.SFO

When I try to read keysOffset in it comes out to be -469762048 and its supposed to be 228. So the program throws a negative offset error.

adam
  • 463
  • 1
  • 7
  • 15
  • before reading the values of your bytes `itemCount = raf.readInt();`, you have to [reverse the array](https://stackoverflow.com/questions/2137755/how-do-i-reverse-an-int-array-in-java). – Martin Frank May 04 '23 at 06:41

0 Answers0