我使用BufferedReader从InputStream中读取行。当我直接从InputStream读取内容时,BufferedReader会忽略我的读取并继续在同一位置读取。是否有可能阻止这种行为?如果不是这样做的好习惯吗?
PS:这是我的代码:
byte[] ba = new byte[1024*1024];
int off = 0;
int len = 0;
do {
len = Integer.parseInt(br.readLine());
in.read(ba, off, len);
br.readLine();
off += len;
} while(len > 0);
in
是我的输入流,br
是我的bufferedreader。
答案 0 :(得分:3)
如果不是这样做的好习惯?
对于同一个文件,这不是一次读取2个流的好方法。您只需使用一个流。
BufferedReader
用于character
流,而InputStream
用于binary
流。
二进制流没有
readLine()
方法,该方法仅在character
流中可用。
答案 1 :(得分:0)
无法同时从BufferedReader和InputStream中读取数据。如果需要二进制数据,则应使用多个readLine()调用。
这是我的新代码:
byte[] ba = new byte[1024*1024];
int off = 0;
int len = 0;
do {
len = Integer.parseInt(br.readLine().split(";" , 2)[0],16);
for (int cur = 0; cur < len;) {
byte[] line0 = br.readLine().getBytes();
for (int i = 0; i < line0.length; i++) {
ba[off+cur+i] = line0[i];
}
cur += line0.length;
if(cur < len) {
ba[off+cur] = '\n';
cur++;
}
}
off += len;
} while(len > 0);
答案 2 :(得分:-2)
BufferedReader bufferedReader = null;
try
{
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String line = null;
while((line = bufferedReader.readLine()) != null)
{
//process lines here
}
}
catch(IOException e)
{
e.printStackTrace();
}
finally
{
if(bufferedReader != null)
{
try
{
bufferedReader.close();
}
catch(IOException e)
{
}
}
}