iteye_19215 2012-08-21 14:55
浏览 246
已采纳

Java IO 字节流计数问题

[code="java"]
long count = 0;
String line = br.readLine();
while (line != null) {
if (count > length) {
break;
}

                count += line.getBytes("UTF-8").length;
                count += 1; // Add \r's length
                System.out.println(Thread.currentThread() + "  " + line);
                System.out.println(" count:" + count);
                line = br.readLine();
            }

[/code]

用这样的方法来统计已读的字节数为什么输出的结果不对呢?具体的说count统计的数目比实际的要少,这是什么原因造成的?

  • 写回答

7条回答

  • jinnianshilongnian 2012-08-21 16:45
    关注

    [code="java"]File file = new File("D:\todo.txt");
    BufferedReader br = new BufferedReader(new FileReader(file));
    long length = 1261192704;
    long count = 0;
    String line = br.readLine();
    while (line != null) {
    if (count > length) {
    break;
    }
    count += 2;
    count += line.getBytes("utf-8").length;
    System.out.println(line);
    line = br.readLine();
    }

        System.out.println(count);
        FileInputStream fis = new FileInputStream(file);
        System.out.println(fis.available());[/code]
    

    测试结果:
    1、如果windows上边读windows文件 返回结果是正确的;
    2、如果windows上边读linux文件结果是有偏差的(count += 1)。

    [quote]getBytes
    public byte[] getBytes(Charset charset)使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组。
    此方法总是使用此字符集的默认替代 byte 数组替代错误输入和不可映射字符序列。如果需要对编码过程进行更多控制,则应该使用 CharsetEncoder 类。
    [/quote]

    难道有些linux字符在windows上无法映射? 你试下 在linux上读取linux文件 结果对吗

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?