[英]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.