如何在不缓冲输入的情况下从InputStream中读取一行?

时间:2014-08-09 05:39:55

标签: java inputstream bufferedreader

我有一个InputStream,它包含一行作为字符串,然后是二进制数据。

如果我使用new BufferedReader(new InputStreamReader(inputStream))读取该行,则二进制数据也会被读取,无法重新读取。

如何在不读取二进制数据的情况下读取一行?

4 个答案:

答案 0 :(得分:3)

*更新:似乎InputStreamReader也缓冲(提前读取):(发布另一个直接从InputStream读取的答案。

最终手动完成:(

我想我错过了许多像\ r和白色空格的案例。

public static String readLine(InputStream inputStream) throws IOException {
    InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
    StringBuilder stringBuilder = new StringBuilder();
    int c;
    for (c = reader.read(); c != '\n' && c != -1 ; c = reader.read()) {
        stringBuilder.append((char)c);
    }
    if (c == -1 && stringBuilder.length() == 0) return null; // End of stream and nothing to return
    return stringBuilder.toString();
}

答案 1 :(得分:0)

最终手动直接从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;
}

答案 2 :(得分:-1)

您是否尝试过DataInputStream

答案 3 :(得分:-2)

你可以试试Scanner Class ....(java.util.Scanner;)

扫描仪输入=新扫描仪(System.in);

String Str = in.nextLine();