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