Я использую следующее для чтения пакета данных из DataInputStream
(обернутого вокруг сокета).
DataInputStream ins = ....;
boolean cleanBreak = true;
try {
synchronized (readLock) {
// read: message length
int ml = ins.readInt();
cleanBreak = false;
// read: message data
byte[] msg = IO.readBytes(ins, ml);
}
} catch (IOException e) {
final boolean eof = e instanceof EOFException && cleanBreak;
...
Используя логическое значение cleanBreak
, я хочу определить, является ли EOFпроисходит в середине пакета (внезапно) или между двумя пакетами.В настоящее время это работает, когда EOF находится в части данных, но не если он находится в заголовке (int), например, если при чтении заголовка осталось только 2 байта.
Как я могу это сделать?