日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

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

發(fā)布時間:2023/12/3 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java上传文件功能_Java MemoryMapped文件的功能 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

java上傳文件功能

Java MemoryMapped文件的功能

在JDK 1.4中,內(nèi)存映射文件的一個有趣功能被添加到Java中,該功能允許將任何文件映射到OS內(nèi)存以進行有效讀取。 內(nèi)存映射文件可用于開發(fā)IPC類型的解決方案。 本文是使用內(nèi)存映射文件創(chuàng)建IPC的實驗。

有關內(nèi)存映射文件的一些詳細信息,來自WIKI的定義

內(nèi)存映射文件是虛擬內(nèi)存的一部分,已為其分配了與文件或類似文件的資源的某些部分的逐字節(jié)直接相關性。 此資源通常是物理上存在于磁盤上的文件,但也可以是設備,共享內(nèi)存對象或操作系統(tǒng)可以通過文件描述符引用的其他資源。 一旦存在,文件和內(nèi)存空間之間的這種關聯(lián)關系允許應用程序將映射部分視為主內(nèi)存。

樣例程序

下面我們有兩個Java程序,一個是作者,另一個是讀者。 寫入者是生產(chǎn)者,嘗試寫入“內(nèi)存映射”文件,讀取者是使用者,它從內(nèi)存映射文件中讀取消息。 這只是一個示例程序,向您展示了這個想法,它不能處理許多極端情況,但足以在內(nèi)存映射文件的頂部構建內(nèi)容。

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;}} }}}}

觀察

使用內(nèi)存映射文件對于開發(fā)進程間通信可能是一個很好的選擇,對于生產(chǎn)者和消費者而言,吞吐量也相當不錯。 按生產(chǎn)者和消費者運行的性能統(tǒng)計數(shù)據(jù):

每條消息是一個長號

產(chǎn)生– 1000萬條消息– 16個

消費者– 1000萬條消息0.6(s)

一條非常簡單的消息用于說明您的想法,但是它可以是任何類型的復雜消息,但是當存在復雜的數(shù)據(jù)結構時,序列化會增加開銷。 有許多技術可以克服這些開銷。 下一個博客中的更多內(nèi)容。

參考:來自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文件的功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。