Веб-служба предоставляет двоичный код chunked application/octet-stream
. Мне нужно создать клиент чтения в java. Я знаю структуру из какой-либо документации и хотел бы использовать этот поток как ObjectInputStream, но прежде чем я могу вызвать любые самодельные методы readObject, этот подход не выполняется из-за java.io.StreamCorruptedException: invalid stream header
.Как получить доступ к данным из внешнего потока
Каков наилучший способ заполнения java-объектов из такого потока байтов?
BTW: данные поступают как LittleEndian, тексты в виде 16-битных символов предшествуют 4-байтовой информации размера, например.
03 00 00 00 41 00 62 00 63 00 (шестнадцатеричный)
приведет к "Abc"
'ObjectInputStream' предполагает обработанные данные результат процесса маршалинга java. Ошибка, с которой вы столкнулись, происходит из-за того, что поток данных не начинается с обычных байтов 'aced 0005' – Aaron
Вам нужно будет что-то сделать, например, поменять байты, использовать' DataInputStream' и заполнить объект. – bradimus
@bradimus: Поскольку я сначала должен поменять байты до того, как будет работать dataInput.readInt(), в чем преимущество DataInputStream над базовым InputStream? Здесь (http://stackoverflow.com/questions/14827398/converting-byte-array-values-in-little-endian-order-to-short-values) Я узнал, что переключение с помощью байтов вручную предпочтительнее использования классов, , – datafiddler