`
weishuwei
  • 浏览: 325980 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

将文件流组装到hessianOutPut里,远程上传文件使用

 
阅读更多
将文件流组装到hessianOutPut里,远程上传文件使用
  1. private static void uploadNIO(File file, HessianOutput out)  
  2.             throws IOException {  
  3.         out.writeByteBufferStart();  
  4.         System.out.println("file = " + file.exists());  
  5.         try {  
  6.             FileChannel channel = new FileInputStream(file).getChannel();  
  7.             System.out.println("file Size: " + channel.size());  
  8.             final int size = 10485760;// 10485760=1024*1024*10  
  9.             ByteBuffer buf = ByteBuffer.allocateDirect(size);  
  10.             int numRead = 0;  
  11.             do {  
  12.                 numRead = channel.read(buf);  
  13.                 buf.flip();//limit=current position;position=0;  
  14.                 int limit = buf.limit();  
  15.                 byte[] tmpByteArray = new byte[limit];  
  16.                 while (buf.hasRemaining()) {  
  17.                     buf.get(tmpByteArray);  
  18.                     out.writeByteBufferPart(tmpByteArray, 0, limit);  
  19.                 }  
  20.                 buf.clear();//position=0;limit=capacity;reset mark;  
  21.             } while (numRead > 0);  
  22.             out.writeByteBufferEnd(new byte[0], 00);  
  23.         } catch (Error e) {  
  24.             e.printStackTrace();  
  25.             throw new RuntimeException(e);  
  26.         }  
  27.     } 


Buffer要点:
  • capacity(): buffer的最大容量
  • limit(): 已用的buffer量
  • position(): 当前定位下一个读/写的位置
  • mark(): 最后一次用reset()重置的位置
  • 常用方法:
     方法名  说明
     position()  返回当前位置
     position(int index)  将index设为当前位置
     limit()  返回当前限度
     limit(int newLimit)  将newLimit设为当前限度
     clear()  position设0,limit设capacity,取消所有mark
     rewind()  position设0,取消所有mark
     flip()  limit设为当前position,position设为0

分享到:
评论
1 楼 xiaobojava 2013-04-22  
把HessianOutput作为参数报:HessianOutput没有Serialized!
Serialized class com.caucho.hessian.io.HessianOutput must implement java.io.Serializable

请求博主如何处理?

相关推荐

    java socket 大文件传输,快速传输(包的分片,组装)源码

    - **组装**:接收端接收到这些分片后,需要按照一定的规则(如序列号)将它们重新组装成原始文件。这一步骤至关重要,因为只有正确组装,才能恢复出完整的文件。 3. **Java Socket编程** - **Socket**:Java的...

    如何在vb中分割一个文件并组装恢复它

    - 按照分割时设定的顺序,使用`OpenTextFileReader`或`OpenBinaryFileReader`打开每个部分文件,逐个读取内容,并使用`ReadAllBytes`或`ReadAllText`将其写入组装文件。 - 读取完所有部分文件后,关闭所有打开的...

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

    综上所述,"Netty5多文件、大文件上传源码"涉及到的技术点包括Netty框架的使用、多文件上传的实现、大文件分块传输、长连接管理、心跳机制、错误处理与重试策略、性能优化以及安全性措施。这些知识点共同构建了一个...

    C# WinForm 通过WebSocket 实现文件传输示例

    4. **分块发送文件**:由于WebSocket允许发送二进制数据,我们可以将文件内容按一定大小(例如64KB)分割成多个数据块,然后逐个发送到服务器。每个数据块都需要包含必要的元信息,比如文件名、总块数、当前块序号等...

    vue+el_upload实现文件上传的方式.doc

    在使用POST请求上传文件时,我们需要将文件组装成form-data类型。这是因为POST请求的body中可以包含文件数据,而form-data类型可以正确地传输文件数据。在Vue.js中,我们可以使用axios库来发送POST请求,并将文件...

    安卓Android源码——Android中Socket大文件断点上传.zip

    - **文件组装**:根据接收到的块信息,将文件块保存到服务器的临时文件中,并按顺序合并成完整文件。 - **状态更新**:服务器端维护文件块的状态数据库,确保所有块按顺序接收且无遗漏。 6. **安全性与优化**: ...

    如何在vb中分割一个文件并组装恢复它(18KB)

    标题中的“如何在VB中分割一个文件并组装恢复它”是指使用Visual Basic(VB)编程语言来实现文件的分割和合并功能。这是一个常见的需求,特别是在处理大文件时,可能需要将其分割成更小的部分以便于传输或存储,然后...

    Flv文件提取视频流H264

    当我们需要从FLV文件中提取H264视频流时,通常是为了进行视频处理、分析或转换到其他格式。 提取H264视频流的过程涉及以下几个关键知识点: 1. **FLV文件结构**:FLV文件由头部信息、数据标签(Data Tags)和尾部...

    oss实现js上传

    将大文件分割成多个小块,分别上传,最后再进行合并,可以提高上传速度和稳定性。 4. **断点续传**:当上传过程中网络中断,可以记录已上传的块,下次续传,避免重新上传整个文件。 5. **多线程上传**:通过并发上传...

    springboot大文件分片上传下载控制

    前端通过多次请求获取到文件的所有分片后,按照正确的顺序将接收到的二进制数据流拼接在一起,然后触发浏览器的下载行为,可以使用Blob对象和URL.createObjectURL方法创建一个指向文件内容的URL,再设置一个下载...

    java 发邮件带excel附件,以流的形式发送附件,不生成excel文件

    在某些场景下,我们可能希望直接以流的形式处理Excel数据,而不是先将其保存为一个实际的文件,然后再作为附件发送。这样可以节省磁盘空间,提高效率。本文将详细介绍如何在Java中实现这个功能。 首先,我们需要...

    大文件上传(无限制)

    1. **文件分割**:使用FileStream读取大文件,然后使用MemoryStream或其他方法将文件分割为多个小块。 2. **初始化上传**:创建一个POST请求,发送文件元数据(如文件名、总大小等)到服务器,服务器返回一个唯一的...

    TS 文件的传输

    在服务器端,接收到数据后,也需要使用文件流将接收到的数据写入到本地文件,从而实现文件的下载。 为了确保数据完整性和效率,我们可以使用**缓冲区**来存储和处理数据。缓冲区可以减少磁盘I/O操作的次数,提高...

    readuff.rar_UFF格式文件_uff文件 matlab_uff文件格式_uff格式 matlab_读取数据

    例如,描述中提到的“readuff.m”可能是这样一个函数,用于解析UFF文件并将其内容加载到MATLAB工作空间。这样的函数通常需要理解UFF文件的内部结构,包括数据的组织方式、标头信息以及数据编码等。 **读取UFF数据的...

    如何在VB中分割一个文件并组装恢复它(18KB)...

    总之,在VB中实现文件分割与组装是一个涉及文件流操作的过程,需要合理规划文件命名和保存元数据,以确保在组装时能正确地复原原始文件。通过学习和实践这样的例子,开发者可以更好地掌握文件处理技术,提升自己的...

    WIN10文件分割合并

    总的来说,"WIN10文件分割合并"涉及到的关键知识点包括:Windows 10环境下大文件的管理,文件分割的必要性,文件分割器的使用,以及如何通过FileSplitter这样的工具高效地进行文件分割和合并。理解并掌握这些知识,...

    php+html5多进程实现超大附件无刷新上传(更优方案)

    php+html5多进程实现超大附件无刷新上传,支持超大文件,核心原理是前端将文件分割成多个片段,然后依次将片段上传到服务器,服务器后端接收到全部片段后,再组装成完整的文件,后端在组装片段时,会将校验原始文件...

    Java大文件传输示例额

    3. 当接收到所有数据块并按顺序写入后,使用`FileChannel`的`transferTo`或`mergeFiles`方法将临时文件合并成原始大文件。 在整个过程中,需要注意的是数据完整性和错误处理。例如,可以为每个数据块添加校验和,...

    java-socket大文件上传-含客户端和服务端

    - 将大文件分割成多个小块,然后依次通过输出流(OutputStream)发送到服务器。 - 每个数据块前加上其位置信息和校验码,确保服务器能正确重组文件。 - 发送完成后,关闭Socket连接。 在这个项目中,...

    ilasm2.0 用于将ildasm生成的il文件重新编译成dll文件

    ILASM(Intermediate Language Assembler)是.NET框架中的一个工具,它是.NET编程模型的一部分,主要用于将中级语言(IL,Intermediate Language)代码组装成可执行的.NET模块或程序集,如DLL或EXE文件。ILASM是.NET...

Global site tag (gtag.js) - Google Analytics