检测EOF是在readInt的开头还是中间的某个地方

|| 我正在使用以下内容从
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;

        ...
我想使用“ 2”布尔值来确定EOF是发生在数据包中间(突然)还是恰好出现在两个数据包之间。当前,当EOF在数据部分中时有效,但在标头(int)中无效,例如如果在读取标头时只剩下2个字节。 我怎样才能做到这一点?     
已邀请:
        一种方法是内联readInt:
public final int readInt() throws IOException {
    int ch1 = in.read();
    int ch2 = in.read();
    int ch3 = in.read();
    int ch4 = in.read();
    if ((ch1 | ch2 | ch3 | ch4) < 0)
        throw new EOFException();
    return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0));
}
并对其进行特殊检查以适应第一个字节。     

要回复问题请先登录注册