一、一般来说缓冲区和通道结合在一起使用,写入文件的时候,需要先存放在缓冲区,然后通过通道写入。读取文件的时候也类似,通过通道读取在缓冲区。然后通过缓冲区获取文件内容。
Buffer针对每一种java基本类型都有实现。Channel针对不同的使用对象也有不同的实现,一般常见的为FileChannel与SocketChannel两类。
Buffer底层实现为数组,有三个重要的参数,position,limit,capacity,分别代表当前位置,剩余空间,最大容量
Buffer有两种模式,读模式与写模式。通过方法flip()进入读取模式,clear()方法进入写入模式。
二、代码实例:
package nio; import java.io.FileInputStream; import java.io.FileOutputStream; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; /** * NIO拷贝文件(Buffer与FileChannel的使用实例) * * @author * @version $Id: CopyFile.java, v 0.1 2014年3月2日 下午12:34:55 Exp $ */ public class CopyFile { public static void main(String[] args) throws Exception { String srcFile = "D://1.wmv"; String targetFile = "D://2.wmv"; FileInputStream fin = null; FileOutputStream fout = null; FileChannel finc = null; FileChannel foutc = null; try { fin = new FileInputStream(srcFile); fout = new FileOutputStream(targetFile); finc = fin.getChannel(); foutc = fout.getChannel(); ByteBuffer buffer = ByteBuffer.allocate(1024); while (true) { buffer.clear(); int n = finc.read(buffer); if (n == -1) { break; } buffer.flip(); foutc.write(buffer); } } catch (Exception e) { e.fillInStackTrace(); } finally { if (finc != null) { finc.close(); } if (foutc != null) { foutc.close(); } if (fin != null) { fin.close(); } if (fout != null) { fout.close(); } } } }
上面的代码中,通过通道将文件内容读取到缓冲区,然后通过通道写入到文件。Buffer在文件读取之前调用clear,在文件写入之前调用flip。
相关推荐
NIO的核心概念包括通道(Channel)、缓冲区(Buffer)和选择器(Selector),这些组件协同工作,提升了数据传输的效率。 **通道(Channel)**: 1. **通道基础**:通道是一种从源读取数据到目标写入数据的途径,它...
`Channel Deal` 可能会涉及到Buffer的read()和write()方法,用于将数据从通道读入缓冲区,或者从缓冲区写入通道。 3. **选择器(Selector)**:为了同时管理多个通道,Java NIO提供了一种多路复用器(Selector)...
在实际应用中,Buffer可以与Channel结合使用,实现数据的高效传输。例如,在读取文件时,可以使用FileChannel来读取文件,并将数据写入到Buffer中,然后可以从Buffer中读取数据。 以下是一个使用Buffer读取文件的...
3. **关联缓冲区**:通过`read()`或`write()`方法将通道与缓冲区关联,进行数据传输。 4. **关闭通道**:完成操作后,记得关闭通道以释放资源。 `stoppedhua`这个标签可能是表示某个教学过程或者代码执行被中断的...
标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。 Java NIO: Non-blocking IO(非阻塞IO) Java NIO...
文章目录IO 与 NIO 的比较通道和缓冲区缓冲区(buffer)通道(channel)使用 NIO 完成本地通信使用 NIO 完成网络通信管道 IO 与 NIO 的比较 IO NIO 面向流(Stream Oriented) 面向缓冲区(Buffer Oriented)...
尚硅谷_NIO_缓冲区(Buffer)的数据存取 ·03. 尚硅谷_NIO_直接缓冲区与非直接缓冲区 ·04. 尚硅谷_NIO_通道(Channel)的原理与获取 ·05. 尚硅谷_NIO_通道的数据传输与内存映射文件 ·06. 尚硅谷_NIO_分散读取与聚集...
**通道(Channel)与缓冲区(Buffer)** 在Java NIO中,数据通过通道(Channel)进行读写,而Buffer则作为数据的载体。通道可以看作是连接I/O源和目的地的管道,比如文件、套接字或者网络流。读取数据时,数据会从...
缓冲区的类型与通道相关,主要有以下几种: - ByteBuffer:存储基础数据类型为byte的缓冲区。 - CharBuffer:存储基础数据类型为char的缓冲区。 - DoubleBuffer:存储基础数据类型为double的缓冲区。 - ...
Java NIO(New Input/Output)是Java提供的一种新的输入输出处理机制,它与传统IO基于流的处理方式不同,NIO支持面向缓冲区的(Buffer-oriented)、基于通道的(Channel-based)I/O操作。在Java NIO中,Buffer类是...
NIO的核心概念包括通道(Channel)和缓冲区(Buffer),这两个组件使得数据以块的形式进行传输,从而提高了性能。 1. **通道(Channel)**: - 通道是数据传输的双向路径,可以将数据从源读取到目标,也可以将数据...
NIO基于缓冲区Buffer、通道Channel和选择器Selector等机制实现高性能、非阻塞I/O操作。 从提供的【部分内容】中可以提取出以下知识点: 1. NIO核心组件:在Java NIO中,主要包含三个核心组件,分别是Buffer(缓冲...
NIO的核心组件包括Buffer(缓冲区)和Channel(通道),它们共同解决了传统I/O模型中的一些性能瓶颈。 1. **Buffer(缓冲区)**: - 缓冲区是NIO中的核心概念,它是一个对象,包含了存储数据的内存块。Buffer有...
NIO 的核心组件包括 Channel(通道)、Buffer(缓冲区)和 Selector(选择器)。 - **Channel(通道)**:通道类似于流,但是数据只能从 Channel 读取到 Buffer 中,或者从 Buffer 写入到 Channel 中。 - **Buffer...
在Java编程领域,NIO(New Input/Output)是一种用于替代标准IO模型的机制,其核心在于非阻塞的I/O操作和通道(Channel)及缓冲区(Buffer)的使用。传统的IO模型,如描述中的“阻塞I/O”,在读写数据时会一直等待...
NIO的主要特点是基于通道(Channel)和缓冲区(Buffer)进行数据读写,并且支持非阻塞I/O操作和多路复用,这使得它在处理大量并发连接时表现出色。 1. **Java NIO概述** Java NIO的核心组件包括通道(Channel)、...
Selector 是 Java NIO 中的一个核心组件,它可以在一个线程上通过一个选择(Selector)使用轮询的方式去监听多个通道 Channel 上注册的事件,从而在一个线程上就能实现对多个 Channel 的处理。 Java NIO 的优点 ---...
- **缓冲区(Buffer)和通道(Channel)**:NIO的核心在于缓冲区和通道这两个概念。所有的数据读写都需要经过缓冲区,而通道则连接着源与目标,用于数据的读取和写入。 ##### 1.2 缓冲区内部实现机制 缓冲区(Buffer)是...
它们通常与通道配合使用,通过通道将数据写入缓冲区,或者从缓冲区读取数据。例如,FileChannel提供了read()和write()方法,可以直接读写文件。 在实际应用中,开发者首先创建缓冲区,然后通过通道进行数据传输。...