《Java2入门经典JDK5》学习笔记——读文件(二)

1.2如何在文件通道读操作中使用缓冲区

完成文件通道的读操作有下列3种read方法:
⑴ read(ByteBuffer buf) 将读取的文件数据存放到字节缓冲区buf中;
⑵ read(ByteBuffer[] buffers) 将读取的文件数据同时存放到字节缓冲区数组buffers的每一个元素buffers[i]中;
⑶ read(ByteBuffer[] buffers, int offset, int length) 将读取的文件数据存放到字节缓冲区数组buffers的buffers[offset]到buffer[offset+length-1]的元素中。
该3种方法从文件中读取的数据数量取决于缓冲区的位置和边界。读取的字节数据在缓冲区中存放的位置均从当前位置开始,并随着读取的字节数递增,但缓冲区的边界不会变化。它们的返回值均为实际读取的字节数,当读到文件末尾时返回-1。
另外,这3种方法均会抛出下列5种异常:①NonReadableChannelException,文件未允许读取;②ClosedChannelException,通道关闭;③AsynchronousCloseException,通道被另一个线程关闭;④ClosedByInterruptException,另一线程中断了当前线程;⑤IOException,输入输出错误。其中,只有第一种异常不需要捕获。
执行读操作后,文件位置会发生相应变化,随着读取的字节数递增。可以通过FileChannel对象的position()方法来获得文件的当前位置,也可以使用position(int)方法来指定文件的位置。position方法会抛出ClosedChannelException和其他IOException异常。
综上,读文件的基本框架如下:
// 创建文件通道
File aFile = new File(“C:/Beg Java Stuff/myFile.txt”);
FileInputStream inputFile = null;
try {
    inputFile = new FileInputStream(aFile);
} catch (FileNotFoundException e) {
    e.printStackTrace(System.err);
    System.exit(1);
}
FileChannel inChannel = inputFile.getChannel();
    // 创建缓冲区
    ByteBuffer buf = ByteBuffer.allocate(1024);
    // 从文件中读取数据到缓冲区
    try {
        while (inChannel.read(buf) != -1) {
            // 从缓冲区中提取数据
            buf.clear();
        }
        System.out.println(“到达文件尾.”);
    } catch (IOException e) {
        e.printStackTrace(System.err);
        System.exit(1);
    }
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值