나는 좋은 표제를 찾으려고했지만 실패한 것 같다. 여기에 내 문제가있다 :자바 역 직렬화 : 버퍼에서 읽을 때 객체의 끝에 도달했을 때 어떻게 알 수 있습니까?
나는 소켓에서 데이터를 읽고있다. 버퍼에 포함 된 데이터는 직렬화 된 객체입니다. 일단 데이터가 완전히 읽혀지면 ObjectInputStream을 만들고 readObject를 사용하여 데이터를 읽을 수 있습니다.
내 소켓 클래스가 바이트를 읽고 있기 때문에 문제가 발생합니다 ... 전체 객체를받은 시간을 어떻게 알 수 있습니까? 객체 표시기가 끝나지 않은 것 같아요. 길이 필드를 찾을 수 있는지 알아보기 위해 일련 화 된 바이트 코드를 찾으려고했지만 직렬화 바이트 코드는 Google에서 어디에서나 잘 설명되지 않습니다.
내가받는 객체는 차이가 나는 경우 해시 맵 (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을 읽고 있어요 그래서, 내 질문은, 어떻게 내가 개체의 끝에 도달 한 결정합니까?
참고 : 이러한 개체를받는 서버를 어떤 식 으로든 수정할 수는 없습니다. 그건 내 코드가 아니야.
감사합니다.
찰스.
http://docs.oracle.com/javase/6/docs/api/java/io/ObjectInputStream.html – blank