java上传文件功能

Java MemoryMapped文件的功能

在JDK 1.4中,内存映射文件的一个有趣功能被添加到Java中,该功能允许将任何文件映射到OS内存以进行有效读取。 内存映射文件可用于开发IPC类型的解决方案。 本文是使用内存映射文件创建IPC的实验。

有关内存映射文件的一些详细信息,来自WIKI的定义

内存映射文件是虚拟内存的一部分,已为其分配了与文件或类似文件的资源的某些部分的逐字节直接相关性。 此资源通常是物理上存在于磁盘上的文件,但也可以是设备,共享内存对象或操作系统可以通过文件描述符引用的其他资源。 一旦存在,文件和内存空间之间的这种关联关系允许应用程序将映射部分视为主内存。

样例程序

下面我们有两个Java程序,一个是作者,另一个是读者。 写入者是生产者,尝试写入“内存映射”文件,读取者是使用者,它从内存映射文件中读取消息。 这只是一个示例程序,向您展示了这个想法,它不能处理许多极端情况,但足以在内存映射文件的顶部构建内容。

MemoryMapWriter

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;public class MemoryMapWriter {public static void main(String[] args) throws FileNotFoundException, IOException, InterruptedException {File f = new File("c:/tmp/mapped.txt");f.delete();FileChannel fc = new RandomAccessFile(f, "rw").getChannel();long bufferSize=8*1000;MappedByteBuffer mem =fc.map(FileChannel.MapMode.READ_WRITE, 0, bufferSize);int start = 0;long counter=1;long HUNDREDK=100000;long startT = System.currentTimeMillis();long noOfMessage = HUNDREDK * 10 * 10; for(;;){         if(!mem.hasRemaining()){start+=mem.position();mem =fc.map(FileChannel.MapMode.READ_WRITE, start, bufferSize);}mem.putLong(counter); counter++;if(counter > noOfMessage )break; }long endT = System.currentTimeMillis();long tot = endT - startT;System.out.println(String.format("No Of Message %s , Time(ms) %s ",noOfMessage, tot)) ;  }}

MemoryMapReader

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;public class MemoryMapReader {/*** @param args* @throws IOException * @throws FileNotFoundException * @throws InterruptedException */public static void main(String[] args) throws FileNotFoundException, IOException, InterruptedException {FileChannel fc = new RandomAccessFile(new File("c:/tmp/mapped.txt"), "rw").getChannel();long bufferSize=8*1000;MappedByteBuffer mem = fc.map(FileChannel.MapMode.READ_ONLY, 0, bufferSize);long oldSize=fc.size();long currentPos = 0;long xx=currentPos;long startTime = System.currentTimeMillis();long lastValue=-1;for(;;){while(mem.hasRemaining()){lastValue=mem.getLong();currentPos +=8;}if(currentPos < oldSize){xx = xx + mem.position();mem = fc.map(FileChannel.MapMode.READ_ONLY,xx, bufferSize);continue;   }else{long end = System.currentTimeMillis();long tot = end-startTime;System.out.println(String.format("Last Value Read %s , Time(ms) %s ",lastValue, tot));System.out.println("Waiting for message");while(true){long newSize=fc.size();if(newSize>oldSize){oldSize = newSize;xx = xx + mem.position();mem = fc.map(FileChannel.MapMode.READ_ONLY,xx , oldSize-xx);System.out.println("Got some data");break;}}   }}}}

观察

使用内存映射文件对于开发进程间通信可能是一个很好的选择,对于生产者和消费者而言,吞吐量也相当不错。 按生产者和消费者运行的性能统计数据:

每条消息是一个长号

产生– 1000万条消息– 16个

消费者– 1000万条消息0.6(s)

一条非常简单的消息用于说明您的想法,但是它可以是任何类型的复杂消息,但是当存在复杂的数据结构时,序列化会增加开销。 有许多技术可以克服这些开销。 下一个博客中的更多内容。

参考:来自JCG合作伙伴 Ashkrit Sharma 的Java MemoryMapped File的强大功能,在Are you ready博客上。

翻译自: https://www.javacodegeeks.com/2013/05/power-of-java-memorymapped-file.html

java上传文件功能

java上传文件功能_Java MemoryMapped文件的功能相关推荐

  1. java上传ftp数据丢失_Java:将文件上传到FTP问题(数据包丢失) - java

    我正在尝试将文件从Java应用程序传输到FTP服务器 该程序可以正常工作,文件已传输,但是当我在FTO文件夹中打开文件时,文件已损坏,我认为在文件传输过程中数据包丢失了.为什么?我该如何解决? 另一个 ...

  2. java 上传速度计算_Java文件上传速度很慢

    我已经构建了一个小型服务,它从 Android设备接收图像并将它们保存到Amazon S3 Bucket.代码很简单,但速度很慢.它是这样的: public synchronized static R ...

  3. java 上传 进度,关于 javaweb的文件上传实时显示进度

    方法:使用单例保存实时信息.具体的实现方法就是,当用户点击了处理按钮时,在后台开启一个线程进行处理,并且每进行到一步,就向单例中写入当前状态信息.然后编写一个servlet,用于返回单例中的信息,前台 ...

  4. 关于java 上传的音频或视频文件获取时长及视频封面

    1.引入依赖,由于在Github上面的maven依赖,下载不下来,需要手动下载jar,然后安装到本地的maven仓库 <!-- https://mvnrepository.com/artifac ...

  5. java 上传速度计算_java – 确定上传的传输速率

    使用 android.net.TrafficStats获得传输的业务量是可行的.以下是测量上游和下游传输速率的这种思想的实现.您可以通过将TrafficSpeedMeasurer.TrafficTyp ...

  6. java大文件 索引_JAVA 大文件上传解决方案(500M以上)

    核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开 ...

  7. java上传文件限制大小_Java Web:附件上传,两种文件上传限制格式及大小方法,学习笔记文件操作【诗书画唱】...

    附件上传: package com.jy.controller; import java.io.File; import java.io.FileOutputStream; import java.i ...

  8. java 上传文件到服务器_java上传文件到OSS云服务器(二)

    上篇文章中已经把接口端和service业务层写了,这次就把OSS上传文件的工具类补上. 一.首先配置好OSS服务器各项节点,这是在springboot中appliaction.yml配置文件中的写法. ...

  9. java上传文件到七牛_java 上传文件到七牛云

    com.qiniu qiniu-java-sdk dependency> //java上传流文件,二进制流文件 //java 七牛上传 @RequestMapping("/file&q ...

最新文章

  1. cartograhper--X1_lidar
  2. solver.prototxt参数说明(三)
  3. visio数据流线文字方向的问题
  4. [新手及懒人适用]轻松恢复误Ghost的硬盘
  5. gesturedetector.java_我的flutter代码中的GestureDetector不起作用
  6. Android 学习资源收集
  7. UltraEdit 21 for Mac(高级文本编辑器)
  8. ObjC解码汉字网页乱码问题
  9. URL编码分析与乱码解决方案
  10. ESP8266—“ICACHE_FLASH_ATTR”宏——解释含义
  11. powerpc如何移植Linux系统,PowerPC平台 u-boot 移栽
  12. 【CF1324E】Sleeping Schedule(dp)
  13. Python学习,55道django面试题,来试试吧
  14. 5 断点无效_JTO|应建明团队揭示罕见ALK/ROS1/RET基因组断点的分子病理学特点及靶向治疗疗效...
  15. 三、神奇的自然常数e之“自然”兄弟
  16. Robocup3D项目搭建
  17. 夏天泡脚的好处和注意事项
  18. BERT大火却不懂Transformer?读这一篇就够了
  19. Java编程随机发红包,红包随机算法Java实现
  20. Vue报错------did you register the component correctly? For recursive components, make sure to provide

热门文章

  1. 1.数据湖deltalake初识
  2. 分布式之redis复习精讲
  3. IDEA一定要改的8条配置
  4. 如何轻松愉快的理解条件随机场(CRF)
  5. 漫画:什么是二叉堆?(修正版)
  6. vue非编译的模块化写法
  7. CSS3的几个变形案例……
  8. MyBatis中动态SQL
  9. python变量的创建过程(内存地址变化)
  10. React功能界面的组件化编码流程