Попытка чтения между строк ...
Если вы на самом деле читаете массив, то (в отличие от C) все массивы знают их длину. Java является безопасным языком, поэтому длина необходима для проверки границ.
MyType[] things = (MyType[])in.readObject();
int len = things.length;
Возможно, ваша трудность в том, что вы делаете пользовательскую (де) сериализацию и записываете отдельные элементы массива (подсказка: не используйте массив). В случае, если вам нужно перехватить OptionDataException, чтобы определить конец пользовательских данных вмещающего объекта:
private static final MyType[] NOTHING = new MyType[0];
private transient MyType[] things = NOTHING;
private void writeObject(ObjectOutputStream out) throws IOException {
out.defaultWriteObject(); // Do not forget this call!
for (MyType thing : things) {
out.writeObject(thing);
}
}
private void readObject(
ObjectInputStream in
) throws IOException, ClassNotFoundException {
in.defaultReadObject(); // Do not forget this call!
List<MyType> things = new ArrayList<MyType>();
try {
for (;;) {
things.add((MyType)in.readObject();
}
} catch (OptionalDataException exc) {
// Okay - end of custom data.
}
this.things = things.toArray(NOTHING);
}
Если вы собираетесь делать такие вещи, гораздо лучше записать число объектов, которые вы собираетесь прочитать, как целые, перед фактическими данными.