Hi Andy,
Welcome to the JavaRanch!
1/ I synchronized the complete methods of the Data class (a simple approach but less performant). Just like you I read the complete record and then I convert the bytes to a String[]. To convert the bytes into the String[] I just need 1 for loop. Maybe I also have to mention that I don't use a static database schema but I also read it from the database file.
2/ If you do not want to fail automatically, do NOT change the interface you got. I created an own interface which extends the given interface and added a few extra methods. None of these extra methods used a transfer object. I opted for a thin client approach and that's where the transfer objects come into play
I created a business service with a few methods and these methods use transfer objects, so it's the business service which converts from String[] to transfer object (and vice versa). In the Data class itself I work with String[] (which makes my Data class also usable for a database file with customers or hotels)
Hope it helps!
Kind regards,
Roel