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, слишком короткий.

Другие вопросы по тегам