writeUTF (String s) vs writeObject (String s)

En este proyecto Java en el que estoy trabajando para la universidad, tengo una situación en la que actualmente estoy enviando cadenas a través de la red con éxito usando

streamOut = ObjectOutputStream
streamIn = ObjectInputStream

streamOut.writeUTF(msgs.peek());

donde msgs es una cola de bloqueo vinculada, recibiéndola con

String in = streamIn.readUTF();

sin embargo, me gustaría usar un ObjectInputStream y un ObjectOutputStream. Los he inicializado tanto en el constructor y descargo el ObjectOutputStream después de construirlo, leí en algún lugar que tienes que hacer esto.

Quiero enviar tanto Strings como otro tipo de Objeto, llamarlo gameWorld a través de la red (no me importa la eficiencia en este punto) .. Sin embargo, cuando lo hago

streamOut.writeObject("mad cuz i'm bad");

Object in = streamIn.readObject(); 
if(in instanceof String) String inS = (String) in;

no detecta nada cuando envío cadenas por encima ... mi amigo está trabajando en el mismo proyecto y él pasa solo un tipo de objeto, una de las subclases de este objeto es esencialmente una cadena y su versión funciona bien, pero hace una nueva transmisión en cada iteración del bucle de ejecución de su hilo.

¿Debo hacer algo con la secuencia para recibir diferentes objetos que no tienen un ancestro común que no sea Objeto, debo hacer una nueva secuencia cada iteración del bucle de ejecución o hay algo más completamente que falta y la información que he proporcionado no es suficiente para decir qué está mal?

Respuestas a la pregunta(2)

Su respuesta a la pregunta