我试图想出一个好的标题,但似乎失败了。这是我的问题:
我正在从套接字读取数据。缓冲区中包含的数据是一个序列化的对象。一旦数据被完全读取,我就可以创建一个 ObjectInputStream 并使用 readObject 来读取数据。
我的问题是,因为我的套接字类正在读取字节......我怎么知道我什么时候收到了完整的对象?对象指示器似乎没有结束,我尝试寻找序列化字节码的突破以查看是否可以找到长度字段,但序列化字节码在谷歌可以找到的任何地方都没有得到很好的解释。
我收到的对象是哈希映射(java.util.Map),如果这有区别的话。
这是我正在使用的部分代码:
long start = System.currentTimeMillis();
long end = start + (getTimeout() * 1000);
m_Ipports.send(dataToSend);
m_Waiting = true;
while (m_Waiting) {
// Data is read in a separate thread, and stored into the byte buffer m_DataIn
if (System.currentTimeMillis() > end) {
//throw new Exception("Timeout waiting for response.");
m_Waiting = false; // hack to get it to work. Times out every time.
}
m_Ipports.doEvents();
}
ByteArrayInputStream bis = new ByteArrayInputStream(m_DataIn.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
Object o = ois.readObject();
Map m = (Map)o;
所以,我的问题是,当我阅读 m_DataIn 时,我如何确定我已经到达对象的末尾?
注意:我不能以任何方式修改我从中接收这些对象的服务器。这不是我的代码。
谢谢。
查尔斯。