java NIO比普通IO访问速度有较大的提高,原因是新IO所使用的结构接近于操作系统执行IO的方式:通道和缓冲器。唯一直接与通道交互的缓冲期是ByteBuffer.
参考下面的例子:
public class GetChannel {
private static final int BSIZE=1024;
public static void main(String[] args) throws Exception{
FileChannel fc=new FileOutputStream("D:\\data.txt").getChannel();
fc.write(ByteBuffer.wrap("Some text".getBytes()));
fc.close();
fc=new RandomAccessFile("D:\\data.txt","rw").getChannel();
fc.position(fc.size());
fc.write(ByteBuffer.wrap("Some more".getBytes()));
fc.close();
fc=new FileInputStream("D:\\data.txt").getChannel();
ByteBuffer buff=ByteBuffer.allocate(BSIZE);
fc.read(buff);
//一旦调用read()来告知FileChannel向ByteBuffer存储字节,就
//必须调用缓冲期上的flip(),让它做好让别人读取字节的准备
buff.flip();
while(buff.hasRemaining())
System.out.print((char)buff.get());
}
}
如果我们进一步read(),则先清空ByteBuffer,参见如下代码:
FileChannel in =new FileInputStream("aa.txt").getChannel(),
FileChannel out =new FileInputStream("aa.txt").getChannel(),
ByteBuffer buffer=ByteBuffer.allocate(1024);
while(in.read(buffer)!=-1)
{
buffer.flip();
out.write(buffer);
//
buffer.clear();
}
分享到:
相关推荐
1. **Java NIO基础** - **通道(Channels)**:Java NIO 提供了多种通道,如文件通道、套接字通道等,它们代表不同类型的I/O操作。 - **缓冲区(Buffers)**:数据在通道和应用程序之间传输时会存储在缓冲区中,...
- **缓冲区(Buffer)**:缓冲区是Java NIO中数据读写的基础单元。根据数据类型的不同,Java NIO 提供了多种缓冲区: - **ByteBuffer**:用于基本字节数据的缓冲。 - **CharBuffer**:用于字符数据的缓冲。 - **...
根据提供的文件信息,我们可以提取并总结出关于Java NIO(New Input/Output)的重要知识点。 ### Java NIO 概述 Java NIO 是 Java 平台的一个重要特性,首次出现在 Java 1.4 版本中。它为 Java 开发者提供了一套...
1. **NIO基础** - **通道(Channels)**:通道类似于流,但它是双向的,可以读也可以写。常见的通道有FileChannel、SocketChannel、ServerSocketChannel等。 - **缓冲区(Buffers)**:NIO的核心组件,用于存储...
1. **NIO基础** - **通道(Channels)**:NIO中的通道类似于流,但它们是双向的,可以读写数据。常见的通道类有FileChannel、SocketChannel和ServerSocketChannel等。 - **缓冲区(Buffers)**:缓冲区是数据的...
通过以上知识点,我们可以构建出高效率、非阻塞的I/O服务,特别是在服务器端处理大量并发连接时,Java NIO的优势尤为明显。学习并掌握这些内容,能够帮助开发者编写出更加高效、可扩展的Java应用。
根据提供的文件信息,本文将围绕Java NIO(New Input/Output)的相关知识点进行详细解析,同时探讨相关的视频学习资源。 ### Java NIO简介 Java NIO(New Input/Output),即新输入输出,是Java 1.4版本引入的一个...
项目涵盖了Java NIO基础、五子棋游戏规则与逻辑、Java GUI设计及多线程编程等知识点。学习者可通过实践掌握Java NIO中的Channel、Buffer和Selector的使用,理解非阻塞IO的优势。同时,通过实现五子棋的人机对战和...
本项目“Large-File-Processing-master_javanio_java大文件处理_”显然专注于通过Java NIO实现大文件处理,下面我们将详细探讨相关的知识点。 1. **Java NIO基础**:NIO的核心组件包括通道(Channels)、缓冲区...
- **基础知识**:介绍了字符集的基本概念及其在 Java 中的应用。 - **字符集类**:讲解了 `Charset` 类及其相关方法,如 `forName(String charsetName)`、`encode(CharBuffer source)` 和 `decode(ByteBuffer source...