У меня небольшая программа TCP-сервера и соответствующий клиент, и они общаются через классы ServerSocket и Socket и DataInputStream/DataOutputStream. И у меня проблема с отправкой Strings на сервер.
connection = new Socket("localhost", 2233);
outStream = new DataOutputStream(connection.getOutputStream());
outStream.writeBytes(fileName);
fileName на данный момент является жестко запрограммированной строкой со значением "listener.jardesc". Сервер считывает строку со следующим кодом:
inStream = new DataInputStream(connection.getInputStream());
String fileName = inStream.readLine();
Строка получена правильно, но три байта с нулевым значением добавлены в конец. Почему это и как я могу остановить его? (Я мог бы, конечно, обрезать полученную строку или каким-то образом остановить эту проблему от материи, но я бы предпочел полностью предотвратить эту проблему)
writeBytes() не добавляет лишних байтов.
Код, который вы написали, недействителен, так как вы не пишете новую строку. Поэтому он не работает и навсегда блокирует readLine().
При попытке отладить это вы, кажется, читали байты другим способом, возможно, с read(); и проигнорировать возвращаемое значение, возвращаемое чтением, и сделать вывод, что read() заполнил предоставленный вами буфер, когда он этого не сделал, оставив три байта в их исходном состоянии, которое равно нулю.
Я просто собираюсь бросить это там. Вы используете метод readLine(), который устарел в Java 5, 6 и 7. В документах API достаточно четко указано, что этот метод "неправильно преобразовывает байты в символы". Я бы прочитал его как байты или использовал Buffered Reader.
http://docs.oracle.com/javase/1.5.0/docs/api/java/io/DataInputStream.html#readLine%28%29