Я пытаюсь написать программу, которая выборочно читает сериализованные объекты из файла с учетом их байтовых смещений.Я начал с сериализации трех объектов одного типа в файле, а затем прочитал их, используя FileInputStream, ByteArrayInputStream и ObjectInputStream.Но каждый раз, когда я пытаюсь прочитать определенный объект, он всегда возвращает мне первый объект.Вот небольшая программа:
public class TestObject implements Serializable {
String term;
double value;
public TestObject(String term, double value) {
this.term =term;
this.value = value;
}
public String toString() {
String str = term + " : " + value;
return str;
}
}
public class ObjectReader {
public static void main(String[] args) throws IOException,ClassNotFoundException {
TestObject t1 = new TestObject("abc", 1.0);
TestObject t2 = new TestObject("xyz", 1.0);
TestObject t3 = new TestObject("123", 1.0);
//Writing 3 objects to file and displaying offsets
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream objOut = new ObjectOutputStream(baos);
FileOutputStream fos = new FileOutputStream("data.dat");
objOut.writeObject(t1);
byte[] arr = baos.toByteArray();
System.out.println(arr.length); //displays 81
fos.write(arr);
objOut.writeObject(t2);
arr= baos.toByteArray();
System.out.println(arr.length); //displays 101
fos.write(arr);
objOut.writeObject(t3);
arr= baos.toByteArray();
System.out.println(arr.length); //displays 121
fos.write(arr);
fos.close();
objOut.close();
//Reading a specific object back using offset
FileInputStream fis = new FileInputStream("data.dat");
byte[] inArr = new byte[101];
fis.skip(81); //skip to second object
fis.read(inArr);
System.out.println(fis.available()); //displays 121 which is correct
ByteArrayInputStream bain = new ByteArrayInputStream(inArr);
ObjectInputStream objIn = new ObjectInputStream(bain);
TestObject t4 =(TestObject)objIn.readObject();
System.out.println(t4);
}
}
Однако каждый раз, когда я запускаю эту программу, она отображает только первый объект (abc: 1.0).Что может быть причиной этого?Разве нельзя читать сериализованные объекты, как это?Пожалуйста, игнорируйте вопросы эффективности, так как я просто пытаюсь понять концепцию и эксперимент.