⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unserialcache.java

📁 中国联通短信通信协议
💻 JAVA
字号:
package com.wireless.sms.gwif.smsagent.func;

import java.util.*;
import com.wireless.sms.pub.entity.MT;

public class UnserialCache {
  private static int SIZE = 1000;
  private boolean ok;
  private InnerMap queueMap = new InnerMap(SIZE);
  private InnerMap keyMap = new InnerMap(SIZE);
  private Vector validKey = new Vector();

  public boolean isOk() {
    return ok;
  }

  public void addMT(MT mt){
      if( queueMap.containsKey(mt.getMoID()) ){
          Map tmpMap = (Map)queueMap.get(mt.getMoID());
          tmpMap.put(mt.getCurPos()+"", mt);
      }
      else{
          Map tmpMap = new HashMap();
          tmpMap.put(mt.getCurPos()+"", mt);

          queueMap.put(mt.getMoID(), tmpMap);
      }
  }

  public void addKey(MT mt){
      //本来不需要加这个判断的,因为只有在第一条来的时候才加入,但由于应用可能出错,以做兼容
      if( keyMap.containsKey(mt.getMoID()) ){
        int count = Integer.parseInt((String)keyMap.get(mt.getMoID()));
        keyMap.put(mt.getMoID(), (count - 1) + "");
      }
      else{
        keyMap.put(mt.getMoID(), (mt.getTotal()-1)+"");
      }

      if( queueMap.containsKey(mt.getMoID()) ){
          ok = true;
          validKey.add(mt.getMoID());

          if( validKey.size() > SIZE ){
            validKey.removeElementAt(0);
          }
      }
  }

  public boolean isNext(MT mt){
      if( keyMap.containsKey(mt.getMoID()) ){
          int count = Integer.parseInt((String)keyMap.get(mt.getMoID()));
          if (count <= 1) {
              keyMap.remove(mt.getMoID());
              queueMap.remove(mt.getMoID());
              validKey.remove(mt.getMoID());
          } else {
              keyMap.put(mt.getMoID(), (count - 1) + "");
          }

          return true;
      }

      return false;
  }


  public MT getMT(){
      MT mt = null;

      if( validKey.size() > 0 ){
          String moID = (String)validKey.elementAt(0);
          Map tmpMap = (Map)queueMap.get(moID);

          if( tmpMap.size() > 0 ){
              String key = (String)tmpMap.keySet().iterator().next();
              mt = (MT)tmpMap.get(key);
              tmpMap.remove(key);
          }

          if( tmpMap.isEmpty() ){
              validKey.remove(0);
              ok = false;
          }
      }

      return mt;
  }

  class InnerMap extends LinkedHashMap {
	  private static final long serialVersionUID=1L;
      private int size = 0;

      public InnerMap(int size) {
          this.size = size;
      }

      protected boolean removeEldestEntry(Map.Entry eldest) {
          return size() > size;
      }
  }

  public String toString(){
      return
          "queueMap.size - " + queueMap.keySet().size() + " " +
          "queueMap.innerMap.size - " +
          (queueMap.keySet().size()>0?((Map)queueMap.get(queueMap.keySet().iterator().next())).size():0) +
          " keyMap.size - " + keyMap.keySet().size() +
          " validKey.size - " + validKey.size() + " ok - " + ok;
  }


}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -