Serialização e desserialização de objetos

Eu estava lendo que não é de boa prática criar vários ObjectInputStream e ObjectOutputStream para um mesmo socket, mas a minha dúvida é por que? Devo aceitar como religião? E se eu quiser serializar e desserializar objetos de tipos diferentes por exemplo enviar para um servidor uma ArrayList de marcas e o servidor me devolver um ArrayList dos produtos daquela marca e eu quiser enviar novamente ao servidor que eu quero um produto específico.

Por fim, como eu poderia fazer algo do tipo sem instanciar outro ObjectInputStream e ObjectOutputStream ou sem lançar os erros dessa classe?