Bufferedreader使用的方法

问题遇到的现象和发生背景
char[] charArr = new char[12];
try(BufferedReader br = new BufferedReader(new FileReader(file));){
  int chars;
  while((chars = br.read(charArr))!=-1){
    System.out.println(new String(charArr, 0, chars));
  }
} catch(IOException e){
  e.printStackTrace();
}
我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%

我很好奇

    System.out.println(new String(charArr, 0, chars));

这个是什么意思,为什么charArr,0和chars在里面呢?
还有

 while((chars = br.read(charArr))!=-1)

这个为什么把charArr放在read()里面,有什么作用么?

new String(charArr, 0, chars), 是将数组里从0开始往后chars长度的值合成一个String
while((chars = br.read(charArr))!=-1) 这个你要注意它的括号,他是先执行了br.read ,这个方法是将文件的数据读到这个数组里面,然后返回读取的长度,没读取到就返回-1,chars就是用来接收这个返回值的,最后将chars和-1作比较,不等于,说明读取的数据不为空