java上传文件功能_Java MemoryMapped文件的功能

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上传文件功能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348442.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java代码快速_java代码编写快捷途经

CtrlR 然后按下R键SHiftAltR&#xff1a;对选定属性进行全局命名CtrlD:删除当前行CtrlQ&#xff1a; 定位到最后编辑的地方CtrlL&#xff1a; 定位在某行CtrlM&#xff1a; 最大化当前的 Edit(命令)CtrlO&#xff1a;快速显示大纲CtrlD&#xff1a;显示继承结构CtrlW :关掉当…

控制Java并行流的并行度

在掌握了这些新功能之后&#xff0c;随着Java 9的最新发布&#xff0c;我们有了许多新功能可以用来改进我们的解决方案。 Java 9的发布也是修改我们是否掌握Java 8功能的好时机。 在本文中&#xff0c;我想解决关于Java并行流的最常见的误解。 人们通常说您不能以编程方式控制…

java小型超市系统_Java小型超市收银系统

【实例简介】Java SE开发的超市收银系统&#xff0c;实现了数据库操作&#xff0c;文件读取数据&#xff0c;写入数据等操作【实例截图】【核心代码】超市收银系统└── 期末综合├── bin│ ├── Driver.class│ ├── control│ │ ├── ExportMenuController…

double取值范围 java_Java中float/double取值范围与精度

Java浮点数浮点数结构要说清楚Java浮点数的取值范围与其精度&#xff0c;必须先了解浮点数的表示方法&#xff0c;浮点数的结构组成&#xff0c;之所以会有这种所谓的结构&#xff0c;是因为机器只认识01&#xff0c;你想表示小数&#xff0c;你要机器认识小数点这个东西&#…

开源点云数据处理 开源_大数据开源安全

开源点云数据处理 开源在安全性方面从未有&#xff08;恕我直言&#xff09;已经足够了开源解决方案和布鲁斯已经撰写了有关这几个 时间在过去 &#xff0c;而且也没有必要再次改写参数。 现在&#xff0c;随着市场上“ NoSQL”和“大数据”开源趋势的发展&#xff0c;安全终于…

为您的Web应用程序启用两因素身份验证

支持两因素身份验证&#xff08;2FA&#xff09;几乎总是一个好主意&#xff0c;尤其是对于后台系统。 2FA有许多不同的形式&#xff0c;其中一些包括SMS&#xff0c;TOTP甚至是硬件令牌 。 启用它们需要类似的流程&#xff1a; 用户转到其个人资料页面&#xff08;如果要在注…

redis java序列化_java处理redis的几种序列化策略

简单记录一下java处理redis的几种序列化策略&#xff0c;这里使用的环境是springboot 2.0.4springboot中提供了StringRedisTemplate和RedisTemplate两种序列化类&#xff0c;它们都只能读自己存的数据&#xff0c;即数据互不相通。主要区别如下&#xff1a;1、采用的序列化策略…

java 访问内部类的属性_java中的内部类详细总结

内部类不是很好理解&#xff0c;但说白了其实也就是一个类中还包含着另外一个类如同一个人是由大脑、肢体、器官等身体结果组成&#xff0c;而内部类相当于其中的某个器官之一&#xff0c;例如心脏&#xff1a;它也有自己的属性和行为(血液、跳动)显然&#xff0c;此处不能单方…

迟来总比没有好:SSE或服务器发送的事件现在已在JAX-RS中

服务器发送的事件 &#xff08;或简称为SSE &#xff09;是非常有用的协议&#xff0c;它允许服务器通过HTTP将数据推送到客户端。 这是我们的网络浏览器支持的年龄&#xff0c;但令人惊讶的是&#xff0c; JAX-RS规范在很长一段时间内都忽略了这一点。 尽管Jersey提供了适用于…

java 面向对象继承的思想_Java面向对象思想

Java类的定义&#xff1a;成员变量会默认初始化&#xff0c;局部变量不会默认初始化。如何在内存中区分类和对象&#xff1a;♦类是静态的概念&#xff0c;代码区♦对象是new出来的&#xff0c;位于堆内存&#xff0c;类的每一个成员变量在不同的对象中都有不同的值(除了静态变…

java 垃圾回收手动回收_Java垃圾回收(4)

java 垃圾回收手动回收G1&#xff1a;垃圾优先 G1收集器是热点JVM中要实现的最新收集器。 自Java 7 Update 4以来&#xff0c;它一直是受支持的收集器。OracleGC团队也公开表示&#xff0c;他们对低暂停GC的希望是完全实现的G1。 这篇文章来自我之前的垃圾收集博客文章&#xf…

使用正确的垃圾收集器将Java内存使用量降至最低

大小对于软件至关重要。 很明显&#xff0c;与大型整体方法相比&#xff0c;在微服务体系结构中使用小型组件具有更多优势。 最新的Java版本的Jigsaw可帮助分解旧应用程序或从头开始构建新的云原生应用程序。 这种方法减少了磁盘空间&#xff0c;构建时间和启动时间。 但是&am…

java 鼠标画多个圆形_点击鼠标不同的建(左、中、右)画一个不同颜色的圆

[java]代码库import java.awt.Color;import java.awt.Graphics;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import javax.swing.JFrame;public class T1 extends JFrame{int x;int y;Color c;public T1(){this.setSize(600,400);this.setDefaultCl…

jslint4java_JSLint检测javascript的错误提示

“Missing semicolon.” : “缺少分号.”,“Use the function form of \”use strict\”.” : “使用标准化定义function.”,“Unexpected space after ‘-’.” : “在’-后面不应出现空格.”,“Expected a JSON value.” : “请传入一个json的值.”,“Mixed spaces and tabs.…

jar运行 osgi保存_自动化的OSGi测试运行程序

jar运行 osgi保存在我的团队成员中&#xff0c;我以忘记维护&#xff08;JUnit&#xff09;测试套件而闻名。 我只是无法完成手动添加测试套件这一额外步骤。 幸运的是&#xff0c;有连续的集成服务器可以按命名模式收集测试。 如果我介绍的一项孤立测试失败了&#xff0c;那么…

mysql 去掉默认约束_06. 默认约束-创建、添加和删除

# 数据库的基本操作创建 删除 数据库、创建 删除表修改 表名 数据类型 字段名 添加字段删除 字段 调整字段位置 更换存储引擎 删除外键删除 数据表 包括被关联父表# 数据完整性六项约束主键约束(PRIMARY KEY)自增约束(AUTO_INCREMENT PRIMARY KEY)唯一约束(UNIQUE)默认约束(DEF…

通过粘性仙人掌基元进行延迟加载和缓存

您显然知道什么是延迟加载 &#xff0c;对吗&#xff1f; 而且您无疑知道缓存 。 据我所知&#xff0c;Java中没有一种优雅的方法来实现它们中的任何一个。 这是我在Cactoos原语的帮助下为自己找到的。 Matteo Garrone的《 Reality&#xff08;2012&#xff09;》 假设我们需…

mysql与sim900a_sim900a的应用,基于SIM900A-GPRS模块的远程文件传输实例

SIM900A是一个比较实用的GPRS模块&#xff0c;进行简单的配置就可以进行用于数据传输&#xff0c;配置使用AT指令进行交互&#xff0c;用GPRS远程传输数据时&#xff0c;有两种方式&#xff0c;一种是正常的模式&#xff0c;没法送一次要发送0x1a来开启数据发送&#xff0c;另一…

java语言编程基础_java语言编程基础

java语言基本要素高级语言如c、c#、java等都有一些共同性的东西&#xff1a;关键字、标识符、运算符、注释、数据类型、常量和变量、语句、函数、数组。高级语言在这些要素上大同小异。Java关键字&#xff1a;一些有特定含义&#xff0c;有专门用途的字符串(keyword)。Java中关…

junit mockito_JUnit和Mockito合作

junit mockito这次&#xff0c;我想对测试框架Mockito进行概述。 毫无疑问&#xff0c;这是用于测试Java代码的最受欢迎的工具之一。 我已经对Mockito的竞争对手EasyMock进行了概述。 这篇文章将基于有关EasyMock的示例应用程序。 我的意思是代表咖啡机功能的类。 使用Mockito…