File.length和BufferedReader.length的问题

读取文件File,累加read.length大概是file.length的85%左右。这是怎么回事?求大神帮忙看看。

 File file = new File(path);
            long fileLength = file.length();
            length = reader.readLine().length();// 去除表头
            // 解析
            while ((line = reader.readLine()) != null) {
                try {
                    length += line.length();
                    } catch (NumberFormatException e) {
                    Log.d("NumberFormatException", e.getMessage());
                } catch (Exception e) {
                    e.printStackTrace();
                }
                }
                Log.d("Test", myPercent(length, fileLength));



                ////
                public static String myPercent(long y, long z) {
        String baifenbi = "";// 接受百分比的值
        double baiy = y * 1.0;
        double baiz = z * 1.0;
        double fen = baiy / baiz;
        NumberFormat nf = NumberFormat.getPercentInstance(); // 注释掉的也是一种方法
        nf.setMinimumFractionDigits(2); // 保留到小数点后几位
        // DecimalFormat df1 = new DecimalFormat("##.00%"); // ##.00%
        // 百分比格式,后面不足2位的用0补齐
        baifenbi = nf.format(fen);
        // baifenbi = df1.format(fen);
        return baifenbi;
    }

可能存在一些诸如换行符的不可视字符

String length()是字符个数,而不是字节数。
应该使用
byte[] data = str.getBytes();
使用data.length获取字节的数目。

java.lang.String.length() 方法返回此字符串的长度。长度是等于Unicode代码单元中的字符串的数目

java.io.File.length() 返回此抽象路径名定义的文件的长度,以字节为单位。