This week's book giveaway is in the OO, Patterns, UML and Refactoring forum. We're giving away four copies of Refactoring for Software Design Smells: Managing Technical Debt and have Girish Suryanarayana, Ganesh Samarthyam & Tushar Sharma on-line! See this thread for details.
Start of file
4 byte numeric, magic cookie value. Identifies this as a data file
4 byte numeric, total overall length in bytes of each record
2 byte numeric, number of fields in each record
Schema description section.
Repeated for each field in a record:
2 byte numeric, length in bytes of field name
n bytes (defined by previous entry), field name
2 byte numeric, field length in bytes
end of repeating block
Repeat to end of file:
1 byte "deleted" flag. 0 implies valid record, 1 implies deleted record
Record containing fields in order specified in schema section, no separators between fields, each field fixed length at maximum specified in schema information
End of file
I understand the 1st 4 bytes of the file and have identified my magic number. It then says there is another 4 bytes that give the length in bytes of each record. Now is that the bytes from number 4-8? Surely it cant be the same value as the magic cookie?
In the schema section it says that n bytes defined be previous entry. Previous entry what? Length?
I feel very confused.
SCJP 6.0, SCJD (400/400), SCBCD for JEE 5, SCWCD 1.4 I do videos for development at
I am probably the only developer ever to have had an orange sized brain tumor in my brain while learning development!!
I would just like to add that i used randomAccessFile with skipBytes() and readInt to get these values
Magic cookie = 513
The readInt method from bytes 4-8 return 182 does that mean that 182 is the length of each record?
Edit *** I just found out that these values match the supplied information. Should I therefore be using a class that calculates the record length for each contractor or can I use my own created class that calculated the record length with the supplied information? I dont want to add any reundant code to this assignment.
Hi Yucca, I had the exact problem you did when I started my assignment. Let see if I can help:
Since you use RandomAccessFile to read/write your data. Then 4 bytes= integer, 2 bytes=short right? Then right off the bat when you first read your data file your should able to do this given raf is the RandomAccessFile:
Reading the data section uses the same idea - readByte to read the delete flag, for loop to read each field's value. Oh to get a String you can use new String(byte) constructor.
Now of course you don't neccessarily need to read the header everytime. That's why the pointer variable enables you to use the raf.seek() method to jump around. Another decision to make is how many time to read the magic cookie value.