Web服务正在提供二进制文件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(hex)
会导致“Abc”
答案 0 :(得分:0)
有时从头开始(或使用您已知的工具)比搜索更复杂的解决方案更快。 我只是创建了自己的专用DataInputStream:
import java.io.IOException;
import java.io.InputStream;
public class LittleEndianInputStream {
private InputStream s;
public LittleEndianInputStream (InputStream in) { s = in; }
boolean readBoolean() throws IOException {return (s.read() == 1);}
int readInt() throws IOException {return s.read() | s.read() << 8 | s.read() << 16 | s.read() << 24; }
char readChar() throws IOException {return (char)(s.read() | s.read() << 8); }
String readString() throws IOException {
int len = readInt();
char [] tarray = new char[len];
for (int i = 0; i < len; i++ ) tarray[i] = readChar();
return new String(tarray);
}
}
根据需要扩展以获得更多数据类型......
仍然欢迎替代解决方案;)