import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
/**
*
* 使用Channel和Buffer拷贝文件
*
*/
public class ChannelCopy {
private static final int BSIZE = 1024;
public static void main(String[] args) throws Exception {
channelCopy("d:\\a.txt","d:\\b.txt");
}
static void channelCopy(String src, String dest) throws Exception{
//一个输入通道,一个输出通道
FileChannel in = new FileInputStream(src).getChannel(),
out = new FileOutputStream(new File(dest).getAbsoluteFile(),true).getChannel();
ByteBuffer bb = ByteBuffer.allocate(BSIZE);
while(in.read(bb)!=-1){
bb.flip();
out.write(bb);
bb.clear();
}
in.close();
out.close();
}
}
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.channels.FileChannel;
/**
*
* 使用transferTo和transferFrom将一个通道和另一个通道相连
*
*/
public class TransferTo {
public static void main(String[] args) throws Exception {
transferTo("d:\\a.txt","d:\\b.txt");
}
static void transferTo(String src, String dest) throws Exception{
//一个输入通道,一个输出通道
FileChannel in = new FileInputStream(src).getChannel(),
out = new FileOutputStream(new File(dest).getAbsoluteFile(),true).getChannel();
in.transferTo(0, in.size(), out);//将in通道数据转入out通道,在文件尾
//out.transferFrom(in, 0, in.size());//将in通道数据转入out通道,会覆盖
in.close();
out.close();
}
}
分享到:
相关推荐
- **直接内存(Direct Byte Buffer)**:Java NIO中的直接缓冲区可以分配在JVM堆外内存,减少从Java对象到本机内存的拷贝,从而实现零拷贝。 - **mmap(Memory Mapped File)**:Java的FileChannel提供了一个映射...
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java平台中用于替代标准I/O(BIO)模型的一种新机制。NIO在Java 1.4版本引入,提供了更高效的数据处理和通道通信方式,特别适用于高并发、大数据...
Java NIO提供了多种通道,如FileChannel用于文件操作,SocketChannel和ServerSocketChannel用于网络通信。通道是双向的,可以同时进行读写操作。 - **缓冲区(Buffers)**:缓冲区是数据存储的地方,它是Java NIO的...
Java NIO(New IO)是Java 1.4版本引入的一个新模块,全称为New Input/Output,是对传统IO API的扩展。它提供了一种更高效、更具选择性的IO操作方式,尤其适用于高并发和大数据处理场景。在这个“java nio 聊天室...
在Java NIO中,数据的读写都是基于缓冲区进行的,这样可以避免不必要的数据拷贝,提高I/O操作的效率。 此外,Java NIO还引入了`Pipe`和`FileChannel`等特性,使得进程间通信和文件操作也变得更加灵活。`Pipe`允许两...
Java NIO(New IO)是Java 1.4版本引入的一个新特性,它为Java程序提供了更高效的数据传输方式,特别是在大文件处理时,相比于传统的IO流,NIO具有显著的优势。标题“ffc.zip_FileCopy_NIO_java nio”表明我们将讨论...
8. **效率比较**:在特定场景下,`DirectByteBuffer`可能比`HeapByteBuffer`更快,因为减少了数据在Java堆和物理内存之间的拷贝。但并非所有情况都适用,具体取决于系统配置和数据量。 通过这本书和提供的源码,你...
在本教程中,我们将深入探讨Java NIO流的两个关键部分:文件通道操作和选择器。 ### 文件通道操作 在Java NIO中,文件通道(FileChannel)是从`java.nio.channels.FileChannel`类中创建的,它允许我们以非阻塞方式...
4. **文件通道(FileChannel)**:用于读写文件,可以进行映射内存操作,如MappedByteBuffer,直接在内存与磁盘之间交换数据,避免了数据拷贝,提高了效率。 5. **管道(Pipe)**:用于两个线程间的单向通信。一个...
《Java NIO》这本书主要探讨的是Java的非阻塞I/O模型,它是Java标准库提供的一种高效、低延迟的I/O处理方式。NIO(Non-blocking Input/Output)与传统的BIO(Blocking I/O)模式相比,更适用于高并发、大数据量的...
### Java NIO 核心概念详解 #### 一、Java NIO 基本介绍 Java NIO(New IO 或 NonBlocking IO)是 Java 1.4 版本开始引入的一种全新的 I/O API,旨在提高 I/O 吞吐量。与传统的阻塞 I/O 相比,NIO 的设计思想更为...
3. **内存直接访问(Direct Buffers)**:NIO支持直接在物理内存中操作数据,避免了频繁的Java堆与物理内存之间的数据拷贝,提高了性能。 4. **聚合操作**:例如FileChannel的transferTo和transferFrom方法,可以...
Java NIO中的主要通道包括FileChannel、DatagramChannel、SocketChannel和ServerSocketChannel,分别对应文件操作、UDP网络通信、TCP网络通信和服务器端的TCP连接。 4. **缓冲区(Buffer)** Java NIO提供了多种...
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java标准库提供的一种替代传统I/O(BIO)模型的新技术。它在Java 1.4版本中被引入,极大地提升了Java处理I/O操作的效率,尤其是在高并发、大数据...
### Java NIO (New Input/Output):IBM技术文档概览与详解 #### 一、引言 在Java开发领域,高效的数据输入输出处理一直是开发者关注的重点之一。随着JDK 1.4的发布,一个新的输入输出库——NIO(New Input/Output...
Java提供了一个名为`java.nio.file.Files`的类,它包含了一些静态方法,如`copy()`,可以用来拷贝文件。以下是一个简单的文件拷贝示例: ```java import java.nio.file.Files; import java.nio.file.Path; import ...
本示例将详细讲解如何使用Java NIO2来高效地拷贝文件。 首先,我们看到代码中定义了一个名为`MyFiles2`的类,这个类用于实现文件或文件夹的拷贝功能。它包含了一些成员变量,如源文件路径`src`、目标文件路径`tar`...
本项目深入探讨了Java网络编程中的多种模式,包括BIO(阻塞IO)、NIO(非阻塞IO)、IO多路复用(select、poll、epoll)、Reactor模式,以及零拷贝技术。通过这些实现,项目展示了如何在高并发环境下优化网络通信效率...