public String readLine(){
        StringBuilder result = new StringBuilder();
        boolean EOF = false;
        while(true){
            if(!EOF){
                if(buff == null || p == buff.length()){
                    buff = read4096();
                    p = 0;
                    if(buff.length() < 4096) EOF = true;
                }else{
                    int i;
                    for(i = p; i < buff.length(); i++){
                        if(buff.charAt(i) == '\0' || buff.charAt(i) == '\n') break;
                    }
                    int oldSize = result.length();
                    result.append(buff.substring(p, i + 1));
                    p = i + 1;
                    if(i != buff.length()) break;
                }

            }
        }
        return result.toString();
    }