緩存List並寫入文件持久化

LIfe is half spent before we know what is it.java

 

緩存List並寫入文件持久化spring

須要緩存一個List集合,好比緩存一個輸入框中用戶以前輸入過的內容,下次當用戶再想往輸入框中寫東西就調用這個緩存的接口,把以前輸入過的東西從緩存中取出並返回;緩存

而爲了這麼一個小小的緩存,引入第三方庫Redis或是Cache等也不太划算,因而就能夠把緩存寫入文件中,序列化到Java虛擬機中,這樣就能夠支持持久化,即便重啓項目緩存的List依然存在;工具

緩存工具類:測試

 1 package com.xinyan.springcloud.tjt;  2 
 3 
 4 import java.io.File;  5 import java.io.FileInputStream;  6 import java.io.FileOutputStream;  7 import java.io.IOException;  8 import java.io.ObjectInputStream;  9 import java.io.ObjectOutputStream; 10 import java.io.Serializable; 11 import java.util.Arrays; 12 import java.util.List; 13 
14 public class StreamUtils implements Serializable{ 15     private static final long serialVersionUID = 1L; 16     /**
17  * 序列化,List 18  * @param list 19  * @param file 20  * @param <T> 21  * @return
22      */
23     public static  <T> boolean writeObject(List<T> list,File file) 24  { 25         T[] array = (T[]) list.toArray(); 26         try(ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(file))) 27  { 28  out.writeObject(array); 29  out.flush(); 30             return true; 31  } 32         catch (IOException e) 33  { 34  e.printStackTrace(); 35             return false; 36  } 37  } 38 
39     /**
40  * 反序列化,List 41  * @param file 42  * @param <E> 43  * @return
44      */
45     public static <E> List<E> readObjectForList(File file) 46  { 47  E[] object; 48         try(ObjectInputStream out = new ObjectInputStream(new FileInputStream(file))) 49  { 50             object = (E[]) out.readObject(); 51             return Arrays.asList(object); 52  } 53         catch (IOException e) 54  { 55  e.printStackTrace(); 56  } 57         catch (ClassNotFoundException e) 58  { 59  e.printStackTrace(); 60  } 61         return null; 62  } 63 
64 }

測試緩存結果:spa

 1 package com.xinyan.springcloud.tjt;  2 
 3 import java.io.File;  4 import java.util.ArrayList;  5 import java.util.List;  6 
 7 import lombok.extern.log4j.Log4j;  8 
 9 @Log4j 10 public class TestStreamUtils { 11     
12     private final static List<String> listSave = new ArrayList<>(); 13     private final static String  FILE_CACHE = "file-tjt"; 14     
15     public static void main(String[] args) throws Exception { 16         TestStreamUtils.saveListToJvm("admin"); 17         TestStreamUtils.saveListToJvm("user"); 18         TestStreamUtils.saveListToJvm("LieIWantTo"); 19         Object listFromJvm = TestStreamUtils.getListFromJvm(); 20         System.out.println("listFromJvm:"+listFromJvm); 21  } 22     
23     
24     public static void saveListToJvm(String input) throws Exception{ 25         List<String> listInput = new ArrayList<>(); 26  listSave.add(input); 27  listInput.addAll(listSave); 28         boolean writeObject = StreamUtils.writeObject(listInput, new File(FILE_CACHE)); 29         if (!writeObject) { 30             log.info("saveListToJvm failed!"); 31  } 32  } 33     
34     public static Object getListFromJvm() { 35         File file = new File(FILE_CACHE); 36         List<Object> readObjectForList = null; 37         if (file.exists()) { 38              readObjectForList = StreamUtils.readObjectForList(file); 39              if (readObjectForList.size() >20) { 40                 readObjectForList.remove(0); 41  } 42         }else { 43             log.info("file not exist!"); 44  } 45         return readObjectForList; 46  } 47 
48 }

測試結果以下圖:3d

相關文章
相關標籤/搜索