一起使用BufferedReader和InputStream

时间:2014-07-28 13:10:06

标签: java inputstream bufferedreader

我使用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。

3 个答案:

答案 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)
        {
        }
    }
}