read方法又不止一個(gè)……
專注于為中小企業(yè)提供做網(wǎng)站、網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)曲沃免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千多家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
public int read(byte[] b)
throws IOException
從輸入流中讀取一定數(shù)量的字節(jié),并將其存儲(chǔ)在緩沖區(qū)數(shù)組 b
中。以整數(shù)形式返回實(shí)際讀取的字節(jié)數(shù)。在輸入數(shù)據(jù)可用、檢測(cè)到文件末尾或者拋出異常前,此方法一直阻塞。
如果 b 的長(zhǎng)度為 0,則不讀取任何字節(jié)并返回
0;否則,嘗試讀取至少一個(gè)字節(jié)。如果因?yàn)榱魑挥谖募┪捕鴽](méi)有可用的字節(jié),則返回值
-1;否則,至少讀取一個(gè)字節(jié)并將其存儲(chǔ)在 b 中。
下面給你介紹幾個(gè)常見(jiàn)的java緩存框架:
1、OSCache
OSCache是個(gè)一個(gè)廣泛采用的高性能的J2EE緩存框架,OSCache能用于任何Java應(yīng)用程序的普通的緩存解決方案。
OSCache有以下特點(diǎn):
緩存任何對(duì)象,你可以不受限制的緩存部分jsp頁(yè)面或HTTP請(qǐng)求,任何java對(duì)象都可以緩存。
擁有全面的API--OSCache API給你全面的程序來(lái)控制所有的OSCache特性。
永久緩存--緩存能隨意的寫入硬盤,因此允許昂貴的創(chuàng)建(expensive-to-create)數(shù)據(jù)來(lái)保持緩存,甚至能讓應(yīng)用重啟。
支持集群--集群緩存數(shù)據(jù)能被單個(gè)的進(jìn)行參數(shù)配置,不需要修改代碼。
緩存記錄的過(guò)期--你可以有最大限度的控制緩存對(duì)象的過(guò)期,包括可插入式的刷新策略(如果默認(rèn)性能不需要時(shí))。
2、Java Caching System
JSC(Java Caching System)是一個(gè)用分布式的緩存系統(tǒng),是基于服務(wù)器的java應(yīng)用程序。它是通過(guò)提供管理各種動(dòng)態(tài)緩存數(shù)據(jù)來(lái)加速動(dòng)態(tài)web應(yīng)用。
JCS和其他緩存系統(tǒng)一樣,也是一個(gè)用于高速讀取,低速寫入的應(yīng)用程序。
動(dòng)態(tài)內(nèi)容和報(bào)表系統(tǒng)能夠獲得更好的性能。
如果一個(gè)網(wǎng)站,有重復(fù)的網(wǎng)站結(jié)構(gòu),使用間歇性更新方式的數(shù)據(jù)庫(kù)(而不是連續(xù)不斷的更新數(shù)據(jù)庫(kù)),被重復(fù)搜索出相同結(jié)果的,就能夠通過(guò)執(zhí)行緩存方式改進(jìn)其性能和伸縮性。
3、EHCache
EHCache 是一個(gè)純java的在進(jìn)程中的緩存,它具有以下特性:快速,簡(jiǎn)單,為Hibernate2.1充當(dāng)可插入的緩存,最小的依賴性,全面的文檔和測(cè)試。
4、JCache
JCache是個(gè)開(kāi)源程序,正在努力成為JSR-107開(kāi)源規(guī)范,JSR-107規(guī)范已經(jīng)很多年沒(méi)改變了。這個(gè)版本仍然是構(gòu)建在最初的功能定義上。
5、ShiftOne
ShiftOne Java Object Cache是一個(gè)執(zhí)行一系列嚴(yán)格的對(duì)象緩存策略的Java lib,就像一個(gè)輕量級(jí)的配置緩存工作狀態(tài)的框架。
6、SwarmCache
SwarmCache是一個(gè)簡(jiǎn)單且有效的分布式緩存,它使用IP multicast與同一個(gè)局域網(wǎng)的其他主機(jī)進(jìn)行通訊,是特別為集群和數(shù)據(jù)驅(qū)動(dòng)web應(yīng)用程序而設(shè)計(jì)的。SwarmCache能夠讓典型的讀操作大大超過(guò)寫操作的這類應(yīng)用提供更好的性能支持。
SwarmCache使用JavaGroups來(lái)管理從屬關(guān)系和分布式緩存的通訊。
清除Java緩存的方法
步驟一:
找到Java的安裝目錄(默認(rèn)為C:\Program Files\Java)選擇當(dāng)前使用的jre版本,如果用的版本為jre5則進(jìn)入jre5文件夾,如果用的版本為jre6則進(jìn)入jre6文件夾。在該文件夾下進(jìn)入bin文件夾。雙擊打開(kāi)文件javacpl.exe
2014下半年教師資格證統(tǒng)考大備戰(zhàn) 中學(xué)教師資格考試 小學(xué)教師資格考試 幼兒教師資格考試 教師資格證面試
步驟二:
在常規(guī)選項(xiàng)中的臨時(shí)Internet文件點(diǎn)擊“設(shè)置”按鈕再點(diǎn)擊“刪除文件”按鈕,刪除所有的臨時(shí)文件。
步驟三:
刪除完緩存之后,需要關(guān)閉所有瀏覽器。再次打開(kāi)瀏覽器進(jìn)入虛擬實(shí)驗(yàn)系統(tǒng)即可。
1、OSCache
OSCache是個(gè)一個(gè)廣泛采用的高性能的J2EE緩存框架,OSCache能用于任何java應(yīng)用程序的普通的緩存解決方案。
OSCache有以下特點(diǎn):
(1)緩存任何對(duì)象,你可以不受限制的緩存部分jsp頁(yè)面或HTTP請(qǐng)求,任何java對(duì)象都可以緩存。
永久緩存--緩存能隨意的寫入硬盤,因此答應(yīng)昂貴的創(chuàng)建(eXPensive-to-create)數(shù)據(jù)來(lái)保持緩存,甚至能讓應(yīng)用重啟。
(2)支持集群--集群緩存數(shù)據(jù)能被單個(gè)的進(jìn)行參數(shù)配置,不需要修改代碼。
緩存記錄的過(guò)期--你可以有最大限度的控制緩存對(duì)象的過(guò)期,包括可插入式的刷新策略(假如默認(rèn)性能不需要時(shí))。
2、Java Caching System
JSC(Java Caching System)是一個(gè)用分布式的緩存系統(tǒng),是基于服務(wù)器的java應(yīng)用程序。它是通過(guò)提供治理各種動(dòng)態(tài)緩存數(shù)據(jù)來(lái)加速動(dòng)態(tài)web應(yīng)用。
JCS和其他緩存系統(tǒng)一樣,也是一個(gè)用于高速讀取,低速寫入的應(yīng)用程序。
動(dòng)態(tài)內(nèi)容和報(bào)表系統(tǒng)能夠獲得更好的性能。
假如一個(gè)網(wǎng)站,有重復(fù)的網(wǎng)站結(jié)構(gòu),使用間歇性更新方式的數(shù)據(jù)庫(kù)(而不是連續(xù)不斷的更新數(shù)據(jù)庫(kù)),被重復(fù)搜索出相同結(jié)果的,就能夠通過(guò)執(zhí)行緩存方式改進(jìn)其性能和伸縮性。
3、EHCache
EHCache 是一個(gè)純java的在進(jìn)程中的緩存,它具有以下特性:快速,簡(jiǎn)單,為Hibernate2.1充當(dāng)可插入的緩存,最小的依靠性,全面的文檔和測(cè)試。
4、JCache
JCache是個(gè)開(kāi)源程序,正在努力成為JSR-107開(kāi)源規(guī)范,JSR-107規(guī)范已經(jīng)很多年沒(méi)改變了。這個(gè)版本仍然是構(gòu)建在最初的功能定義上。
5、ShiftOne
ShiftOne Java Object Cache是一個(gè)執(zhí)行一系列嚴(yán)格的對(duì)象緩存策略的Java lib,就像一個(gè)輕量級(jí)的配置緩存工作狀態(tài)的框架。
6、SwarmCache
SwarmCache是一個(gè)簡(jiǎn)單且有效的分布式緩存,它使用ip multicast與同一個(gè)局域網(wǎng)的其他主機(jī)進(jìn)
行通訊,是非凡為集群和數(shù)據(jù)驅(qū)動(dòng)web應(yīng)用程序而設(shè)計(jì)的。
SwarmCache能夠讓典型的讀操作大大超過(guò)寫操作的這類應(yīng)用提供更好的性能支持。
SwarmCache使用JavaGroups來(lái)治理從屬關(guān)系和分布式緩存的通訊。
擴(kuò)展資料
Java中緩存存在的原因:
一 般情況下,一個(gè)網(wǎng)站,或者一個(gè)應(yīng)用,它的一般形式是,瀏覽器請(qǐng)求應(yīng)用服務(wù)器,應(yīng)用服務(wù)器做一堆計(jì)算后再請(qǐng)求數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)收到請(qǐng)求后再作一堆計(jì)算后把數(shù)據(jù) 返回給應(yīng)用服務(wù)器。
應(yīng)用服務(wù)器再作一堆計(jì)算后把數(shù)據(jù)返回給瀏覽器,這個(gè)是一個(gè)標(biāo)準(zhǔn)流程。但是隨著互連網(wǎng)的普及,上網(wǎng)的人越來(lái)越多,網(wǎng)上的信息量也越來(lái)越多。
數(shù)據(jù)庫(kù)每秒中接受請(qǐng)求的次數(shù)也是有限的,如果利用有限的資源來(lái)提供盡可能大的吞吐量呢。一個(gè)辦法:減少計(jì)算量,縮短請(qǐng)求流程(減少網(wǎng)絡(luò)io或者硬盤io),這時(shí)候緩存就可以大展手腳了。
緩存的基本原理就是打破上圖中所描繪的標(biāo)準(zhǔn)流程,在這個(gè)標(biāo)準(zhǔn)流程中,任何 一個(gè)環(huán)節(jié)都可以被切斷.請(qǐng)求可以從緩存里取到數(shù)據(jù)直接返回。
緩存這個(gè)就不說(shuō)了,將數(shù)據(jù)放在一個(gè)對(duì)象當(dāng)中即可,具體方式由個(gè)人實(shí)現(xiàn)吧。
定時(shí)更改數(shù)據(jù)的這個(gè),可以這樣來(lái)做,使用thread和synchronized關(guān)鍵字即可。
線程可以模仿這個(gè)例子
package thread;
import java.util.Date;
public class MyThread implements Runnable {
private static MyThread instance;
private MyThread(){
}
public static MyThread getInstance(){
if(instance == null)
instance = new MyThread();
return instance;
}
public synchronized void run() {
while(true){
try {
// 打印出時(shí)間標(biāo)明是每隔十秒鐘運(yùn)行的,多次啟動(dòng)該線程同樣是每個(gè)十秒鐘運(yùn)行一次
System.out.println(new Date().getTime());
wait(10000);
System.out.println("loading data.......");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
MyThread thread = MyThread.getInstance();
thread.run();
}
}
public?class?Test2?{
public?static?void?main(String[]?args)?{
try?{
??ListString?list=new?ArrayList();
??//模擬傳過(guò)來(lái)的值
??int?i=0;
?while?(true)?{
???Long?time=?new?Date().getTime();
???//將當(dāng)前時(shí)間與值拼接成字符串?保存到list
???list.add("value"+i+","+time);
???//調(diào)用處理方法
???processing(list);
???i++;
???//模擬每次傳入的時(shí)間長(zhǎng)度
???Thread.sleep(3000);
}
}?catch?(InterruptedException?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}
}
public?static?void?processing(ListString?list){
//第一個(gè)存入的值
? String?src1=list.get(0);
? //最后一個(gè)存入的值
? String?src2=list.get(list.size()-1);
? //通過(guò)?轉(zhuǎn)換成數(shù)組
String?[]?c1=??src1.split(",");
String?[]?c2=??src2.split(",");
//拿到第一個(gè)存入的?時(shí)間字符串?轉(zhuǎn)換成?Long
Long?l1?=?Long.parseLong(c1[1]);
//拿到最新的?時(shí)間字符串?轉(zhuǎn)換成?Long
Long?l2?=?Long.parseLong(c2[1]);
//如果大于等于30000毫秒就說(shuō)明了過(guò)了30秒清空
if((l2-l1)=30000){
list.clear();
}
System.out.println("每次的值"+src2);
?System.out.println("是否30秒清空"+(list.size()==0));
}
}
/*******************************第二種方式*************************************/
public?class?Test2?{
//定義一個(gè)全局變量?用于接收時(shí)間
private?static?Long?time=0L;
public?static?void?main(String[]?args)?{
try?{
??ListString?list=new?ArrayList();
??//模擬傳過(guò)來(lái)的值
??int?i=0;
?while?(true)?{
?//如果list?是在清空狀態(tài)那么就創(chuàng)建個(gè)時(shí)間為第一次時(shí)間
?if(list.size()==0){
??time=?new?Date().getTime();
??}
??//將字符串?保存到list
???list.add("value"+i);
???//調(diào)用處理方法?,沒(méi)次傳入一個(gè)當(dāng)前存入對(duì)象的時(shí)間
???processing(list,new?Date().getTime());
???i++;
???//模擬每次傳入的時(shí)間長(zhǎng)度
???Thread.sleep(3000);
}
}?catch?(InterruptedException?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}
}
public?static?void?processing(ListString?list?,Long?times){
???//?當(dāng)前時(shí)間?-?第一次存入的時(shí)間??大于等于?30000毫秒?
? ???//就是過(guò)了?30秒執(zhí)行?清空操作
if((times-time)=30000){
list.clear();
}
for?(String?ls:list)?{
System.out.println("每次的值"+ls);
}
?System.out.println("是否30秒清空"+(list.size()==0));
}
}
我沒(méi)有redis ?只能模擬一個(gè) 你看下 其實(shí) 你就多了一步 從緩存中取值 判斷不能 等于 30000毫秒 因?yàn)?時(shí)間會(huì)有所偏差 可能大于 所以 大于等于,你要是覺(jué)得 毫秒太長(zhǎng)你可以 轉(zhuǎn)換成秒存入 在計(jì)算
第二種 的話 你的程序 可能不需要太大改掉
當(dāng)前標(biāo)題:java動(dòng)態(tài)緩存代碼,java 實(shí)現(xiàn)緩存
當(dāng)前鏈接:http://chinadenli.net/article36/phgipg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、云服務(wù)器、小程序開(kāi)發(fā)、移動(dòng)網(wǎng)站建設(shè)、Google、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)