下面是java中的nio一个例子,拷贝文件
通过这个例子和注释相信能让你很容易的理解nio的使用
public static void copy()throws Exception{
String source="e:/a.wmv";
String dest="e:/b.wmv";
FileInputStream inputStream=new FileInputStream(source);
FileOutputStream outputStream=new FileOutputStream(dest);
FileChannel iChannel=inputStream.getChannel();
FileChannel oChannel=outputStream.getChannel();
ByteBuffer buffer=ByteBuffer.allocate(1024);
long l1=System.currentTimeMillis();
while(true){
buffer.clear();//pos=0,limit=capcity,作用是让ichannel从pos开始放数据
int r=iChannel.read(buffer);
if(r==-1)//到达文件末尾
break;
buffer.limit(buffer.position());//
buffer.position(0);//这两步相当于 buffer.flip();
oChannel.write(buffer);//它们的作用是让ochanel写入pos - limit之间的数据
}
inputStream.close();
outputStream.close();
System.out.println("complete:"+(System.currentTimeMillis()-l1));
}
ps:
关于buffer,有以下特点
1、buffer相当于一个功能强大的数组
2、buffer有几个特别的变量 pos(位置),mark(标记),limits(限制),capacity(容量),他们的关系如下
0 <= 标记 <= 位置 <= 限制 <= 容量
3、对应buffer的读写,须注意以下几点
3-1、读操作是从pos开始,到limits,读操作发生后,pos会递增,至于递增多少,则看具体情况
3-2、写操作类似,从pos开始写,最多能写到limits处,写操作发生后,pos会递增,递增多少看写的数据如何
分享到:
相关推荐
在Java NIO中,可以使用`FileChannel`类来代表一个文件通道,它可以从一个通道读取数据并写入另一个通道。以下是一个简单的文件复制示例: ```java import java.io.IOException; import java.nio.channels....
Java提供了一个名为`java.nio.file.Files`的类,它包含了一些静态方法,如`copy()`,可以用来拷贝文件。以下是一个简单的文件拷贝示例: ```java import java.nio.file.Files; import java.nio.file.Path; import ...
Java NIO,全称为New Input/Output,是Java在JDK 1.4版本中引入的一个新特性,用于替代传统的IO API。NIO的核心在于它提供了非阻塞的I/O操作,提高了I/O性能,特别是在高并发场景下,极大地提升了系统资源利用率。 ...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。它广泛应用于各种领域,如分布式系统、云计算、游戏服务器等。本篇文章将简单介绍 Netty 以及其与 Java IO 和...
首先,我们看到代码中定义了一个名为`MyFiles2`的类,这个类用于实现文件或文件夹的拷贝功能。它包含了一些成员变量,如源文件路径`src`、目标文件路径`tar`、重试次数`reCount`、是否覆盖已存在文件`isCover`等,...
在这个例子中,我们首先创建了一个`RandomAccessFile`,然后获取其`FileChannel`,接着通过`map()`方法将整个文件映射到内存中。映射模式`READ_WRITE`表示我们既可以从内存写入文件,也可以从文件读取到内存。 共享...
以下是如何将一个照片文件拷贝到另一个位置的例子: ```java import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; public void copyPhoto(Path source, Path ...
`FileReader`用于打开一个文件进行读取,而`BufferedReader`则可以高效地读取字符流。以下是一个简单的例子: ```java import java.io.*; public class ReadTXTFile { public static void main(String[] args) { ...
在这个例子中,我们创建了两个流对象,一个用于读取源文件,另一个用于写入目标文件。我们用一个缓冲区读取源文件的内容,然后写入到目标文件,直到没有更多的数据可读。 5. **复制效率优化** 上述代码虽然能完成...
下面是一个简单的文件复制示例: ```java import java.io.*; public class CopyFile { public static void main(String[] args) { File source = new File("源文件路径"); File dest = new File("目标文件路径...
下面是一个简单的Netty服务器启动代码示例: ```java public class NettyServer { public static void main(String[] args) throws Exception { EventLoopGroup bossGroup = new NioEventLoopGroup(); // 创建...
在这个例子中,当用户点击按钮后,会弹出一个文件选择对话框,用户可以选择一个文件或目录。然后,你可以将所选的文件或目录路径传递给之前的文件复制函数。 总之,Java提供多种方式来实现文件复制,包括基础的I/O...
以下是一个使用BufferedReader和BufferedWriter进行文件复制的例子: ```java import java.io.*; public class FileCopy { public static void main(String[] args) { try (BufferedReader reader = new ...
transferTo()方法允许将数据直接从调用它的通道转移到另一个可写的字节通道中,无需经过应用程序的数据流。 文章通过对比传统文件复制方法和使用transferTo()方法的零拷贝技术,展示了零拷贝技术的性能优势。它首先...
通常来说,Netty官方例子中并不包含传统的"Hello World"示例,但我们可以自定义一个简单的Netty服务器和客户端来快速上手。以下是一个简单的Netty服务器和客户端的代码示例,以帮助理解Netty的使用。 在Netty服务器...
同样,我们利用`File`类的`createNewFile()`方法可以创建一个新的空文件。下面是一个创建并写入文件的示例: ```java File myFilePath = new File("c:/哈哈.txt"); if (!myFilePath.exists()) { myFilePath....
下面是一个简单的Java代码示例,展示如何复制一个图片文件: ```java import java.io.*; public class StreamDemo { public static void main(String[] args) { String sourceFilePath = "Java.jpg"; String ...
零拷贝的基本思想是避免CPU将数据从一个内存区域复制到另一个内存区域,从而减少了CPU的负担和内存带宽的使用。传统的数据传输方式会经历用户空间到内核空间的拷贝、内核空间的处理、再到用户空间的拷贝,最后再到...
5. **ChannelPipeline**:一个处理链,由多个 ChannelHandler 组成,负责处理进来的数据和发出的数据。每个 ChannelHandler 负责特定的职责,如解码、编码、处理业务逻辑等。 6. **ChannelHandler**:用户自定义的...
首先创建目标目录,然后对每个文件进行复制操作。 ```java String url1 = "C:/aaa"; String url2 = "d:/java/"; (new File(url2)).mkdirs(); File[] file = (new File(url1)).listFiles(); for (File f : file...