java 字节流入门(读文件)

导读

写文件基本是单线程顺序写的,用 FileOutputStream 就可以了。但是读文件一般不是顺序读的,为了实现想读哪里读哪里的功能,通常需要 RandomAccessFile。

在我们读文件之前,首先要知道数据起始位置(offset)和长度(length),这样才能使用 RandomAccessFile 的 seek方法移动到数据起始位置,然后将数据读出来。

基本过程就是这样的,很简单:

try (RandomAccessFile raf = new RandomAccessFile(file, "r")) {

            // 数据长度为 10 字节
            int length = 10;

            // 数据起始位置为 offset=5
            int offset = 5;

            // 开辟长度为 length 数组
            byte[] result = new byte[length];

            // 将 RAF 移动到数据起始位置,准备读 length 个字节
            raf.seek(offset);

            // 读 length 个字节
            int count = raf.read(result);
            System.out.println("读了 " + count + " 个字节");

            // 再读一次
            count = raf.read(result);
            System.out.println("读了 " + count + " 个字节");

        } catch (Exception e) {
            e.printStackTrace();
        }

上面这段代码看起来挺完整的,但是,缺少了一个重要环节,验证。当你交给一个人做一件事之后,要验证他是否完成,以及完成的怎么样。这里也一样。

RandomAccessFile 的 read(byte b[]) 方法的定义是这样的(去掉了不重要的doc):读取 b.length 个字节,放到 b 中,并返回一共读取了多少个字节;当到达文件末尾,没有数据可读时,返回 -1。

/**
     * Reads up to {@code b.length} bytes of
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值