Java之NIO概述

本文介绍了Java NIO中的FileChannel和Buffer,包括FileChannel的创建、常用方法,以及Buffer的原理和使用,如ByteBuffer的分配、读写操作。还涉及了解码编码、视图缓冲区和内存映射文件的概念,展示了如何提高I/O操作的效率。
摘要由CSDN通过智能技术生成

三个月没写博客了,主要也不知道写什么,光顾着向GitHub传题目了。理了下思路,并结合了《Thinking in Java》和API文档,分享了下自己对NIO的理解,当然这只是针对于文件I/O,毕竟其他内容实在太多太多了…

NIO概述(文件I/O)

2002年2月13日,JDK1.4发布,工程代号为Merlin(灰背隼)。JDK1.4发布了很多新的特性,其中就包含NIO。
java.nio全称java non-blocking IO,为所有的原始类型(boolean类型除外)提供缓存支持的数据容器,使用它可以提供非阻塞式的高伸缩性网络。
目的
将java.nio.*引入JavaIO库,是为了提高I/O的速度。速度的提高是因为所使用的结构非常接近于操作系统的I/O操纵方式:Channel(通道)、Buffer(缓冲器)。

Channel

Channel的概念可与I/O中的Stream(流)进行类比。不过Stream只是单向的,分为OutputStream和InputStream;而Channel则是双向的,可读可写。
nio中有一个专门的包,“java.nio.channels”:定义了各种通道,这些通道表示到能够执行 I/O 操作的实体(如文件和套接字)的连接;定义了用于多路复用的、非阻塞 I/O 操作的选择器。
而基本的Channel类都实现了Channel接口:用于I/O连接。
常用的Channel有:
- FileChannel:用于读取、写入、映射和操作文件的通道。
- DatagramChannel:针对面向数据报套接字的可选择通道。
- SocketChannel:针对面向流的连接套接字的可选择通道。

此处只介绍 FileChannel

FileChannel

FileChannel需要通过三个类产生。三个类分别为:FileOutputStreamFileInputStreamRandomAccessFile
例:FileChannel fc=new FileOutputStream("filepathname").getChannel();
FileChannel fc=new RandomAccessFile("filepathname","mode").getChannel();

方法
  • public abstract int read(ByteBuffer dst)throwsIOException
    将此通道中的字节序列读入到缓冲区中。返回读入字节的长度,若达到末尾,则返回-1;
  • public abstract int write(ByteBuffer src)throws IOException
    将字节序列从给定的缓冲区写入此通道。返回写入的字节数。
  • public abstract long size()throws IOException
    返回此通道的文件的当前大小。
  • public abstract long transferTo(long position,long count,WritableByteChannel target)throws IOException
    将字节从此通道的文件传输到给定的可写入字节通道。
  • public abstract long transferFrom(ReadableByteChannel src,long position,long count)throws IOException
    将字节从给定的可读取字节通道传输到此通道的文件中。
    上两方法将两个通道直接进行相连
    例:
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值