Это означает, что вы пытаетесь манипулировать тем, что имеет ссылку, но еще не инициализировано. Первое, что нужно сделать, это проверить каждый созданный экземпляр. Используйте контрольные точки, часы, проверяйте свои значения varibale. Следить за трассировкой стека и искать точные строки и столбцы, которые создают проблему
Вывод DataOutputStream.writeUTF()
- это настраиваемый формат, предназначенный для чтения DataInputStream.readUTF()
.
javadocs метода writeUTF
, который вы вызываете, говорят:
Записывает строку в базовый выходной поток с использованием модифицированной кодировки UTF-8 машинным образом.
Во-первых, два байта записываются в выходной поток, как если бы метод
blockquote>writeShort
выдавал количество байтов. Это значение представляет собой количество фактически выписанных байтов, а не длину строки. По длине каждый символ строки выводится последовательно, используя модифицированную кодировку UTF-8 для символа. Если исключение не выбрасывается, счетчикwritten
увеличивается на общее количество байтов, записанных в выходной поток. Это будет как минимум два плюс длинаstr
, и не более двух плюс трижды длинаstr
.
При чтении и записи данных всегда используйте один и тот же тип потока. Если вы подаете поток непосредственно в парсер сакса, то вы не должны использовать DataOutputStream.
Просто используйте
BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
bos.write(os.getBytes("UTF-8"));