protected boolean prepareAndCheckEOF() throws IOException
    {
        if (eof)
        {
            return true;
        }
        if (buf == null || next >= buf.length)
        {
            buf = guarded_take();
            next = 0;
            if (buf.length == 0)
            {
                eof = true;
                return true;
            }
        }
        return false;
    }