Оба варианта возможны, но более полезно создать их только один раз.
Если вам нужна некоторая буферизация (чтобы избежать отправки нового TCP-пакета для каждой команды записи), вы можете подумать оПомещение BufferedInputStream между Socket и DataIn / Output:
DataOutput output = new DataOutputStream(new BufferedOutputStream(clientSocket.getOutputStream()));
DataInput input = new DataInputStream (new BufferedInputStream (clientSocket.getInputStream()));
Я использую интерфейсы DataInput / DataOutput вместо классов Stream здесь, так как часто вам нужны только методы, определенные там.