繁体   English   中英

读取流中的第一行并将其从流中删除

[英]Read the first line in a stream and remove it from the stream

我有2个类必须读取一个InputStream ,第一个应该只解释流的第一行但是应该从流中删除第一行,这样B类就可以解释第一行之后的所有内容。 当我将InputStream传递给BufferedReader并执行readLine()时,这不起作用。

我知道我可以在流上读取,直到遇到\\ b但是可能有更合适的解决方案来完成这项工作吗?

// Reads the first line from the stream and everything else
public String retrieveFileNameFromTheFirstLineInInputStream(InputStream in) throws IOException {
    InputStreamReader isReader = new InputStreamReader(in);
    BufferedReader reader = new BufferedReader(isReader);
    return reader.readLine();
}

我相信即使是InputStreamReader也可以缓冲输入,所以Mike的回答可能会错过输入。

这很尴尬,但你可以使用Apache commons-io的ReaderInputStream 所以:

BufferedReader reader = new BufferedReader(
    new InputStreamReader(in));
String firstLine = reader.readLine();
InputStream in2 = new ReaderInputStream(reader);
// continue with in2 ..

您无法从InputStream 删除某些内容,您只需从中读取即可。 不要使用BufferedReader来读取行,因为它肯定会读取比InputStreamReader的第一行更多的内容(填充其缓冲区),它自己从InputStream读取。

我建议使用InputStreamReader读取,直到到达行的末尾,然后将InputStream实例传递给应该读取它的代码。

顺便说一下,你总是应该指定InputStreamReader使用的编码,否则系统编码将用于将InputStream的字节转换为在不同机器上可能不同的字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM