1. FileChannel
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class SimpleChannel {
private static String SOURCE_PATH = "d:/aa/aa.txt";
private static String CLONE_PATH = "d:/bb/bb.txt";
public static void main(String[] args) throws Exception {
FileInputStream fis = new FileInputStream(new File(SOURCE_PATH));
FileChannel fcInput = fis.getChannel();
FileOutputStream fos = new FileOutputStream(new File(CLONE_PATH));
FileChannel fcOutput = fos.getChannel();
ByteBuffer dst = ByteBuffer.allocate(1024);
while(true) {
// before read clear()
dst.clear();
if(fcInput.read(dst) == -1) {
break;
}
System.out.print(new String(dst.array()));
// before write flip()
dst.flip();
fcOutput.write(dst);
}
fos.flush();
fcInput.close();
fcOutput.close();
fis.close();
fos.close();
}
}
还可以使用下面方式进行操作,在FileChannel中有两个特殊方法可以允许我们直接将两个通道相连:
long transferFrom(ReadableByteChannel src, long position, long count);
long transferTo(long position, long count, WriteableByteChannel targets);
另外
java.nio.channels.Channels类中提供了实用方法,可以在通道中产生Reader和Writer
Reader和Writer可以通过 Channels.newReader(); Channels.newWriter();
2. Charset 字符集
Charset.forName(charCode).newDecoder().decode(buffer).toString();
分享到:
相关推荐
Java NIO(New Input/Output)是Java标准库中提供的一种I/O模型,与传统的 Blocking I/O(同步阻塞I/O)相对。NIO在Java 1.4版本引入,其设计目标是提供一种更高效、更灵活的I/O操作方式,特别适合处理大量并发连接...
首先,理解NIO的基本概念是必要的。NIO中的“非阻塞”意味着当数据不可用时,读写操作不会被挂起,而是立即返回,这极大地提高了程序的效率。NIO的核心组件包括通道(Channels)、缓冲区(Buffers)和选择器...
在学习NIO时,首先需要理解Channel、Buffer、Selector的基本概念和使用方法,然后通过实例来熟悉它们的交互过程。例如,可以通过创建一个简单的服务器,使用ServerSocketChannel监听连接,SocketChannel处理客户端...
1. **Selector(选择器)**:选择器是NIO的核心组件,它能够监控多个通道(Channel)的状态变化,当某个通道准备进行读写操作时,选择器会通知用户线程。这样,一个线程就可以管理多个通道,实现多路复用。 2. **...
1. 创建Selector对象。 2. 将Channel注册到Selector上,并指定感兴趣的事件(如读、写事件等)。 3. 调用Selector的`select()`方法等待事件的发生。如果没有任何事件发生,则此方法会阻塞直到有事件可用。 4. ...
缓冲区是NIO中数据存储的主要方式,它们是固定大小的数组,可以用于存储各种基本类型的数据,如字符、字节、整数等。在读写操作中,数据会先被存入缓冲区,然后再从缓冲区传输,这样可以提高效率。在这个聊天室应用...
1. 改进的文件系统接口(File API):引入了java.nio.file包,其中包括Path、Paths、Files类,提供了更为现代和灵活的文件处理方法。 2. 异步I/O(Asynchronous I/O):提供了更多的异步操作支持,允许I/O操作在后台...
1. **通道(Channels)**:通道是数据传输的路径,可以从一个数据源读取数据或向一个目的地写入数据。例如,FileChannel用于文件操作,SocketChannel用于网络通信。 2. **缓冲区(Buffers)**:缓冲区是数据操作的...
1. NIO基础:介绍NIO的基本概念,如通道、缓冲区、选择器以及它们之间的交互。 2. 文件操作:讲解如何使用NIO进行文件的读写操作,包括文件通道和MappedByteBuffer的使用。 3. 非阻塞I/O:对比NIO和BIO,解释非阻塞I...
#### 1. Buffer(缓冲区) - **Buffer 基础**:介绍了 Buffer 的基本概念,包括如何创建 Buffer、复制 Buffer 以及 ByteBuffer 的具体用法。 - **创建 Buffer**:讨论了多种创建 Buffer 的方法。 - **复制 Buffer**...
### NIO 入门知识点详解 #### 一、NIO 的引入及其背景 - **NIO 的起源**:NIO(New Input/Output)库是在 JDK 1.4 中引入的,旨在解决传统 Java I/O 操作的局限性和性能瓶颈。 - **改进目标**:NIO 通过提供高速...
《深入浅出NIO》 在Java编程领域,NIO(New Input/Output)是一种用于替代标准IO模型的机制,其核心在于非阻塞的I/O操作和通道(Channel)...通过理解NIO的基本概念和机制,我们可以构建出更高效、可扩展的应用程序。
首先,理解Java NIO的基本概念非常重要。NIO中的“N”代表“非阻塞”,这意味着在进行I/O操作时,程序可以继续执行其他任务,而不是等待数据传输完成。NIO的核心组件包括通道(Channels)、缓冲区(Buffers)和选择...
#### 三、NIO实现Socket通信的基本流程 基于Java NIO的Socket通信流程大致如下: 1. **创建ServerSocketChannel**:服务器端首先需要创建一个`ServerSocketChannel`,用于监听客户端的连接请求。 2. **创建...
1. **NIO基础** - **通道**:通道是数据传输的路径,它可以读取或写入数据,比如SocketChannel、FileChannel等。 - **缓冲区**:缓冲区是NIO的核心,它是数据的容器,提供了读写数据的方法,并且有自动管理内存的...
一、NIO的基本概念 1. 缓冲区(Buffer):NIO的核心组件,用于存储数据。Java提供了多种Buffer类,如ByteBuffer、CharBuffer、IntBuffer等,分别对应不同数据类型。每个Buffer都有特定的方法用于写入、读取、清理和...
三、NIO基本操作 1. **打开通道**:通过类的静态方法创建通道,如FileChannel.open()用于打开文件。 2. **分配缓冲区**:通过Buffer子类的allocate()方法创建缓冲区,然后通过put()和get()方法存取数据。 3. **...
首先,我们要理解NIO的基本理念。传统的BIO模型在进行I/O操作时,如果一个线程正在读取或写入数据,那么这个线程会一直被阻塞,直到I/O操作完成。而在NIO中,I/O操作不再阻塞线程,而是采用“选择器”(Selector)来...