从InputStream读取行而不进行缓冲

Ree*_*Ree 4 java inputstream

Java是否有一种简单的方法无需缓冲就可以从InputStream读取行?BufferedReader不适合我的需要,因为我需要通过同一连接反复传输文本和二进制数据,并且缓冲会妨碍您的工作。

Ali*_*aka 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;
}
Run Code Online (Sandbox Code Playgroud)


Tud*_*dor 0

您可以尝试 Scanner 类:http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html

但是,如果不存在换行符,这可能会缓冲输入:

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