KXML2: Неожиданный EOF после получения UDP-пакета
Я имею дело с UDP и отправляю некоторые сообщения. Одно сообщение содержит двоичный XML, и я использую KXML2 со следующим кодом. Работает нормально. В UDP я должен взять фиксированный буфер в DatagramPacket. При использовании этого байтового массива, взятого из DatagramPacket, и запуска моих функций KXML2 каждый раз запускается исключение "Неожиданный EOF".
myPacket = new DatagramPacket( new byte[1024], 1024);
InputStream in = new ByteArrayInputStream(myPacket.getData());
WbxmlParser parser = new WbxmlParser();
parser.setInput(in, "UTF-8");
org.kxml2.kdom.Document dom = new org.kxml2.kdom.Document();
dom.parse(parser);
Исключение выдается в 'dom.parse(parser);' Есть идеи, как выглядит правильный EOF? Возможно, возможно, поместить размер двоичного двоичного объекта xml в начало пакета и извлечь данные, но для меня это только второй способ.
1 ответ
InputStream in = new ByteArrayInputStream(myPacket.getData());
Вы игнорируете фактическую длину пакета. Так должно быть:
InputStream in = new ByteArrayInputStream(myPacket.getData(), myPacket.getOffset(), myPacket.getLength());
но я боюсь, что либо вы не передали полные данные, либо байтовый массив, с помощью которого вы строите принимающий DatagramPacket, слишком короткий.