`
lihuiyongapple
  • 浏览: 6893 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

nio方式实现的文件上传,文件拷贝

    博客分类:
  • java
阅读更多
netty实现的拷贝的方法;
首先引入Channel概念,在NIO编程中,数据读取都是从buff写到channel,从channel读取到buffer中;channel就相当于标准io的stream;(具体可以参考http://www.iteye.com/magazines/132-Java-NIO);


这里直接上代码:对比了标准io拷贝文件和NIO文件拷贝;

标准的io文件拷贝:
public static void copyFileCommon(String file_orignal,String file_des){
FileInputStream fis=null;
FileOutputStream fos=null;
try {
fis=new FileInputStream(file_orignal);
fos=new FileOutputStream(file_des);
try {
byte[] bytes=new byte[2048];
int i;
while((i=fis.read(bytes)) !=-1){
fos.write(bytes,0,i);
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(fis!=null)fis.close();
if(fos !=null)fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
netty实现的文件拷贝:
public static void copyFile(String file_orignal,String file_des){
FileInputStream fis=null;
FileOutputStream fos=null;
FileChannel fileInChannel=null;
FileChannel fileOutChannel=null;
try {
fis=new FileInputStream(file_orignal);
fos=new FileOutputStream(file_des);
fileInChannel=fis.getChannel();
fileOutChannel=fos.getChannel();
fileInChannel.transferTo(0, fileInChannel.size(), fileOutChannel);
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(fis!=null)fis.close();
if(fileInChannel!=null)fileInChannel.close();
if(fos!=null)fos.close();
if(fileOutChannel!=null)fileOutChannel.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}


总结:两种方法都能实现文件拷贝,但是nio方式实现的文件拷贝效率明显高于标准的io拷贝,推荐第二中方式拷贝文件的方法。
分享到:
评论

相关推荐

    Netty5多文件、大文件上传源码

    在“Netty5多文件、大文件上传源码”这个项目中,我们关注的是如何利用Netty来实现在网络环境中传输多个文件,特别是大文件,并且保持客户端与服务器之间的长连接。下面将详细解释相关的知识点。 1. **Netty框架**...

    用netty实现文件传输

    - **零拷贝**:Netty 利用 NIO 的 FileChannel.transferTo 方法,实现了从文件到网络的直接传输,减少了数据拷贝的次数,提高了效率。 - **异步处理**:Netty 的非阻塞 I/O 允许在等待文件传输的同时处理其他任务...

    java swing拷贝文件进度条

    在Java Swing中实现文件拷贝并同时显示进度条是一项常见的任务,特别是在处理大文件时,让用户了解拷贝进度是提高用户体验的重要方式。下面我们将深入探讨如何使用Java Swing来创建这样一个功能。 首先,我们需要...

    文件上传,照片拷贝,读取文本内容源码方法

    以上就是关于文件上传、照片拷贝以及读取文本内容的基本Java实现。在实际项目中,这些操作通常需要更复杂的错误处理和资源管理,但这些基础示例可以作为理解相关概念的起点。如果你正在处理名为`fileTool`的工具类,...

    SFTP定时扫描本地文件上传到Linux服务器

    在描述中提到的实现方式是通过编写Java程序来创建一个SFTP客户端,该客户端可以定时扫描本地文件系统以检查新文件或已完成的文件。这里涉及的Java编程技术可能包括: 1. **Java SFTP库**:如JSch(Java Secure ...

    Java实现Linux的远程拷贝

    JSch是Java的一个SSH库,它允许我们在Java程序中直接实现SSH连接,包括文件的上传和下载。通过JSch,我们可以建立SSH会话,执行`sftp`(Secure File Transfer Protocol)命令,从而实现文件的远程拷贝。 4. **文件...

    Mina上传文件

    在这个"基于Mina架构的文件上传程序"中,我们主要探讨Mina如何与Java NIO(New I/O)技术结合,实现高效、可靠的文件上传功能。 **Mina编码与解码** 在Mina框架中,数据传输通常涉及编码和解码过程。编码是将应用...

    netty file server 文件服务

    文件上传涉及处理 POST 请求,特别是带有文件数据的 Multipart 请求。Netty 提供了 HttpPostRequestDecoder 来解析此类请求。Handler 需要监听 ChannelInboundHandlerAdapter 的 channelRead 完成事件,从中提取出...

    Netty5.0TCP/IP上传大文件

    8. **ChannelFuture**: ChannelFuture代表了一个通道的操作结果,可以通过监听它来获取操作完成的通知,这对于异步操作如大文件上传非常有用。 在实际应用中,我们需要创建一个ServerBootstrap实例,配置...

    netty-file-master.rar

    在 Netty 中实现文件上传,通常需要创建一个专门的 ChannelInboundHandler 来接收文件数据,将接收到的 ByteBuf 连接成完整的文件,并保存到服务器的指定位置。同时,需要处理文件大小限制、断点续传等问题。 6. *...

    netty学习:bio,nio到netty各种使用案例,包括基础使用案例,各api使用方法,零拷贝,websocket,群聊,私聊,编码,解码,自定义协议,protobuf等使用案例,rpc服务器,客户端等等学习

    零拷贝使用案例文件上传 netty的演进模型(3中React器使用案例线程池的添加时机)。 NioEventLoopGroup中的成员变量分析(线程池) ChannelHandlerContext和ChannelPipeLine以及Channel的关系 使用netty自带的编码...

    IO——test

    这个名字可能指的是一种使用AJAX进行文件上传的实现,涉及的技术可能包括XMLHttpRequest对象、FormData对象、以及服务器端接收文件的处理逻辑。 3. `io`:这个文件名可能是一个更广泛的IO相关的代码集合,可能包含了...

    hbgfdstrhtdhf

    综上所述,这个压缩包包含的课程可能涵盖了Netty框架的基础知识,NIO的使用,特别是其在服务器设计、多线程优化、零拷贝技术以及文件操作等方面的应用。对于想深入了解Netty和提升网络编程能力的人来说,这是一份...

    java 常用工具类

    1. 文件上传下载:Java的`java.io`和`java.nio`包提供了丰富的文件操作API。例如,`File`类用于文件和目录的基本操作,`FileInputStream`和`FileOutputStream`用于读写文件,而`BufferedReader`和`BufferedWriter`则...

    JAVA上百实例源码以及开源项目源代码

    凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...

    最新okhttp3.9.0 ikio2.1.0

    在实际开发中,结合使用OkHttp 3.9.0和Iko 2.1.0,开发者可以构建出高性能的网络服务,无论是简单的HTTP GET请求,还是复杂的文件上传下载,都能得到很好的支持。同时,这两个库都提供了良好的文档和社区支持,方便...

    netty视频详解(90节大长篇)

    - **案例二:文件传输服务器**:设计一个可以支持多用户同时上传下载文件的服务端程序。 - **案例三:物联网监控平台**:构建一个能够处理大量传感器数据并实时更新状态的平台。 #### 五、Netty 代码实战与源码剖析...

    Netty权威指南(含源码)

    - 处理大型文件上传和下载。 - 高并发聊天服务器的构建。 压缩包中的源代码可以帮助读者更好地理解书中示例的实现,通过实际动手操作,加深对Netty框架的理解。在学习过程中,读者可以对照源代码进行调试和分析,...

    【IT十八掌徐培成】Java基础第26天-07.DirectByteBuffer.zip

    例如,在大文件上传或下载服务中,使用DirectByteBuffer可以直接将文件数据映射到内存,减少中间数据拷贝,提高传输效率。 总之,DirectByteBuffer是Java NIO中的一个高级特性,通过直接操作系统内存,为大数据处理...

    netty-3.9.2.Final.zip

    4. **零拷贝**:通过ByteBuf实现数据传输的零拷贝,减少了CPU的负载。 5. **ChannelHandler**:定义了处理网络事件的接口,允许用户自定义网络事件的处理逻辑。 6. **API友好**:提供了一套简单易用的API,使得...

Global site tag (gtag.js) - Google Analytics