FileChannel应用

本文介绍JDK1.4引入的Java NIO库,旨在提升文件和网络I/O性能。文章解释了NIO的基本概念,如通道和缓冲区,并提供了一个简单的示例程序,演示如何使用FileChannel进行文件读写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JDK1,.4的java.nio.*包中引入了新的JavaI/O类库,其目的在于提高速度。实际上,旧的I/O包已经使用nio重新实现过,以便利用这种速度提高,因此,即使我们不显示的调用nio编写代码,也能从中受益。速度的提高在文件I/O和网络I/O中都有可能发生。

速度的提高来自于所使用的的结构更接近于操作系统执行I/O的方式:通道和缓冲器。唯一直接与通道交互的缓冲器是ByteBuffer--也就是说,可以存储未加工字节的缓冲器。查询JDK文档时(java.nio.ByteBuffer),会发现他是一个相当基础的类:通过告知分配多少存储空间来创建一个ByteBuffer对象,并且还有一个方法选择集,用于以原始的字节形式或基本数据类型输出读取数据。但是,没办法输出或读取对象,即使是字符串对象也不行。这种处理虽然很低级,但却正好,因为这是大多数操作系统中更有效的映射方式。

旧I/O类库中有是三个类被修改,用以产生FileChannel。这三个被修改的类是FileInputStream、FileOutputStream以及用于既读又写的RandomAccessFile。注意这些是字节操作流,与低层的nio性质一致。Reader和Writer这种字符模式类不能用于产生通道;但是java.nio.channels.Channels类提供了实用的方法;用以在通道中产生Reader和Writer.

public class GetChannel {
    public static final int BSIZE=1024;
    public static void main(String[] args) throws Exception{
        FileChannel fc=new FileOutputStream("data.txt").getChannel();
        fc.write(ByteBuffer.wrap("Some text".getBytes()));
        fc.close();
        fc=new RandomAccessFile("data.txt","rw").getChannel();
        fc.position(fc.size());//Move to the end
        fc.write(ByteBuffer.wrap("Some more".getBytes()));
        fc.close();
        //Read the file
        fc=new FileInputStream("data.txt").getChannel();
        ByteBuffer buffer=ByteBuffer.allocate(BSIZE);
        fc.read(buffer);
        buffer.flip();
        while (buffer.hasRemaining())
            System.out.println((char)buffer.get());
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值