从InputStream读取行而不进行缓冲

时间:2011-12-13 11:30:13

标签: java inputstream

Java有一个简单的方法从InputStream中读取一行而不进行缓冲吗? BufferedReader不适合我的需要,因为我需要反复通过同一个连接传输文本和二进制数据,缓冲只会妨碍。

3 个答案:

答案 0 :(得分:5)

最终手动直接从InputStream读取字节,而不包装InputStream。我尝试的所有内容,如Scanner和InputStreamReader,都会向前读取(缓冲区)输入:(

我想我错过了一些像\ r。

这样的案例
public static String readLine(InputStream inputStream) throws IOException {
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    int c;
    for (c = inputStream.read(); c != '\n' && c != -1 ; c = inputStream.read()) {
        byteArrayOutputStream.write(c);
    }
    if (c == -1 && byteArrayOutputStream.size() == 0) {
        return null;
    }
    String line = byteArrayOutputStream.toString("UTF-8");
    return line;
}

答案 1 :(得分:0)

您可以尝试使用扫描仪课程:http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html

但是,如果没有换行符,可能缓冲输入:

  

由于此方法继续搜索输入以查找行   如果没有,它可以缓冲搜索要跳过的行的所有输入   存在行分隔符。

答案 2 :(得分:-1)

使用BufferedReader读取InputStream并将读取行附加到String可能会更好。

然后,您可以根据需要操纵String,而无需担心缓冲。