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

时间:2010-07-29 09:02:38

标签: java

我有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();
}

2 个答案:

答案 0 :(得分:3)

您无法从<{1}} 删除某些内容,只能读取。不要使用InputStream来读取该行,因为它肯定会比BufferedReader(填充其缓冲区)的第一行读取更多内容,该行本身从InputStreamReader读取。

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

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

答案 1 :(得分:3)

我相信即使是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 ..