IIUC, если вы говорите о дейтаграммах JDK, они не являются сокетами, они предназначены для связи по UTP, легче, чем TCP, но менее надежны и обычно используются для потоковой передачи аудио / видео в реальном времени.
Я бы пошел с DataInputStream / DataOutputStream и использовал бы readByte, readInt, readFloat. Это сэкономит вам много информации о кодировании комплексных чисел на проводе, а также добавит (тонкий) слой обнаружения ошибок.
Если у вас есть Java на другой стороне, это не должно быть проблемой вообще. Если у вас есть C / C ++ с другой стороны, имейте в виду, что он может (но не должен) использовать порядковый номер с прямым порядком байтов вместо порядкового номера с обратным порядком байтов, и в этом случае ваши числа (кроме readByte) будут выглядеть зашифрованными. Вы можете легко найти процедуры для чтения и порядкового номера в java, но это может вызвать приступ боли в первые пару часов:)