不使用缓冲区从InputStream中读取行

7

Java是否有一种简单的方法可以从InputStream中读取一行数据而不需要缓冲?BufferedReader对我的需求来说不太适合,因为我需要通过同一连接重复传输文本和二进制数据,而缓冲只会妨碍这个过程。


通过二进制数据,你没有行对吧?那么如何识别你的数据是文本还是二进制呢? - belgther
1
我确实拥有它们。请求以文本行描述开头,有时后面跟着二进制数据。 - Ree
可能是重复问题:https://dev59.com/OILba4cB1Zd3GeqPc1Ou - AlikElzin-kilaka
3个回答

7
最终,我直接从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;
}

0

扫描器甚至在换行符之后缓冲输入 :( - AlikElzin-kilaka
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Franklin Yu

-3

你最好使用BufferedReader读取InputStream,并将读取的行附加到一个字符串中。

然后,您可以随意操作该字符串,而不必担心缓冲。


2
问题在于我无法控制 BufferedReader 读取输入的方式。它可能会读取一行和一块数据,超出了我的预期。我不希望发生这种情况。 - Ree
@Ree,我认为Scanner只能向后缓冲,而不能向前。 - Tudor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接