一次读取一个inputStream

Suj*_*wal 14 java sockets inputstream java-me

我开发了一个j2me应用程序,通过套接字连接到我的虚拟主机服务器.我使用自己的扩展lineReader类从服务器读取响应,该类扩展了基本的InputStreamReader.如果服务器发送5行回复,则读取服务器的语法逐行回复:

        line=input.readLine();
        line = line + "\n" + input.readLine();
        line = line + "\n" + input.readLine();
        line = line + "\n" + input.readLine();
        line = line + "\n" + input.readLine();
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我可以编写这种语法,因为我知道有一定数量的回复.但是如果我不知道行数,并且想要一次读取整个inputStream,我应该如何修改当前readLine()函数.这是函数的代码:

public String readLine() throws IOException {
    StringBuffer sb = new StringBuffer();
    int c;
    while ((c = read()) > 0 && c != '\n' && c != '\r' && c != -1) {
        sb.append((char)c);
    }
    //By now, buf is empty.
    if (c == '\r') {
        //Dos, or Mac line ending?
        c = super.read();
        if (c != '\n' && c != -1) {
            //Push it back into the 'buffer'
            buf = (char) c;
            readAhead = true;
        }
    }
    return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)

And*_*ite 9

Apache Commons IOUtils.readLines()怎么样?

使用平台的默认字符编码,将InputStream的内容作为字符串列表获取,每行一个条目.

或者,如果您只想要一个字符串,请使用IOUtiles.toString().

使用平台的默认字符编码将InputStream的内容作为String获取.

[更新]根据关于这个可用于J2ME的评论,我承认我错过了这个条件,但IOUtils源依赖于相关性,所以也许代码可以直接使用.