ひょっとして、whileをはずして
in.readObject();
一発だけでOutOfMemoryErrorじゃない?
Dataがリスト構造みたくつながってて、全部釣れてきちゃうんじゃ?