• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Java PerfCounterPack类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了Java中scouter.lang.pack.PerfCounterPack的典型用法代码示例。如果您正苦于以下问题:Java PerfCounterPack类的具体用法?Java PerfCounterPack怎么用?Java PerfCounterPack使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。



PerfCounterPack类属于scouter.lang.pack包,在下文中一共展示了PerfCounterPack类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Java代码示例。

示例1: sendCounter

import scouter.lang.pack.PerfCounterPack; //导入依赖的package包/类
private void sendCounter(PerfCounterPack[] p) {
	try {
		List<byte[]> buff = new ArrayList<byte[]>();
		int bytes = 0;
		for (int k = 0; k < p.length; k++) {
			byte[] b = new DataOutputX().writePack(p[k]).toByteArray();
			if (bytes + b.length >= conf.net_udp_packet_max_bytes) {
				sendDirect(buff); // buff.size가 0일수도 있다.
				bytes = 0;// bytes 값 초기화..
				buff.clear();
			}
			bytes += b.length;
			buff.add(b);
		}
		sendDirect(buff);
	} catch (Exception e) {
	}
}
 
开发者ID:scouter-project,项目名称:scouter,代码行数:19,代码来源:StatusSender.java


示例2: run

import scouter.lang.pack.PerfCounterPack; //导入依赖的package包/类
public void run() {
	while (true) {
		ThreadUtil.sleep(1000);
		if (conf.counter_enabled == false) {
			continue;
		}
		long now = System.currentTimeMillis();
		CounterBasket pw = new CounterBasket();
		for (int i = 0; i < taskSec.size(); i++) {
			CountStat r = taskSec.get(i);
			try {
				if (r.counter.interval() <= now - r.xtime) {
					r.xtime = now;
					r.counter.process(pw);
				}
			} catch (Throwable t) {
				t.printStackTrace();
			}
		}
		//
		PerfCounterPack[] pks = pw.getList();
		DataProxy.sendCounter(pks);
	}
}
 
开发者ID:scouter-project,项目名称:scouter,代码行数:25,代码来源:CounterExecutingManager.java


示例3: getGCInfo

import scouter.lang.pack.PerfCounterPack; //导入依赖的package包/类
@Counter
public void getGCInfo(CounterBasket pw) {

	long[] gcInfo = SysJMX.getCurrentProcGcInfo();

	if (oldGc == null) {
		oldGc = gcInfo;
		return;
	}

	long dCount = gcInfo[0] - oldGc[0];
	long dTime = gcInfo[1] - oldGc[1];
	oldGc = gcInfo;

	gcCountInfo.add(dCount);
	gcTimeInfo.add(dTime);

	PerfCounterPack p = pw.getPack(TimeTypeEnum.REALTIME);
	p.put(CounterConstants.JAVA_GC_COUNT, new DecimalValue(dCount));
	p.put(CounterConstants.JAVA_GC_TIME, new DecimalValue(dTime));

	p = pw.getPack(TimeTypeEnum.FIVE_MIN);
	p.put(CounterConstants.JAVA_GC_COUNT, new DecimalValue((long) gcCountInfo.getSum(300)));
	p.put(CounterConstants.JAVA_GC_TIME, new DecimalValue((long) gcTimeInfo.getSum(300)));

}
 
开发者ID:scouter-project,项目名称:scouter,代码行数:27,代码来源:GCInfo.java


示例4: getHeapUsage

import scouter.lang.pack.PerfCounterPack; //导入依赖的package包/类
@Counter
public void getHeapUsage(CounterBasket pw) {
	long total = Runtime.getRuntime().totalMemory();
	long free = Runtime.getRuntime().freeMemory();
	float used = (float) ((total - free) / 1024. / 1024.);

	heapmin.add(total - free);
	float usedmin = (float) (heapmin.getAvg(300) / 1024. / 1024.);

	ListValue heapValues = new ListValue();
	heapValues.add((float) (total / 1024. / 1024.));
	heapValues.add(used);
	
	PerfCounterPack p = pw.getPack(TimeTypeEnum.REALTIME);
	p.put(CounterConstants.JAVA_HEAP_TOT_USAGE, heapValues);
	p.put(CounterConstants.JAVA_HEAP_USED, new FloatValue(used));

	p = pw.getPack(TimeTypeEnum.FIVE_MIN);
	p.put(CounterConstants.JAVA_HEAP_USED, new FloatValue(usedmin));

}
 
开发者ID:scouter-project,项目名称:scouter,代码行数:22,代码来源:HeapUsage.java


示例5: sendCounter

import scouter.lang.pack.PerfCounterPack; //导入依赖的package包/类
public static void sendCounter(PerfCounterPack[] p) {
	// udp.add(p);
	try {
		List<byte[]> buff = new ArrayList<byte[]>();
		int bytes = 0;
		for (int k = 0; k < p.length; k++) {
			byte[] b = new DataOutputX().writePack(p[k]).toByteArray();
			if (bytes + b.length >= conf.net_udp_packet_max_bytes) {
				sendDirect(buff); // buff.size가 0일수도 있다.
				bytes = 0;// bytes 값 초기화..
				buff.clear();
			}
			bytes += b.length;
			buff.add(b);
		}
		sendDirect(buff);
	} catch (Exception e) {
	}
}
 
开发者ID:scouter-project,项目名称:scouter,代码行数:20,代码来源:DataProxy.java


示例6: counter

import scouter.lang.pack.PerfCounterPack; //导入依赖的package包/类
public static void counter(PerfCounterPack p) {
	BuiltInPluginManager.invokeAllPlugins(PluginConstants.PLUGIN_SERVER_COUNTER, p);

	if (counters != null) {
		try {
			counters.process(p);
		} catch (Throwable t) {
			Logger.printStackTrace("PL006", t);
		}
	}
}
 
开发者ID:scouter-project,项目名称:scouter,代码行数:12,代码来源:PlugInManager.java


示例7: process

import scouter.lang.pack.PerfCounterPack; //导入依赖的package包/类
private static void process(JSONObject json) throws Exception {
	JSONObject objectInfo = (JSONObject) json.get("object");
	if (objectInfo != null) {
		ObjectPack objPack = extractObjectPack(objectInfo);
		InetAddress addr = extractIpv4Address(objectInfo);
		passToNetDataProcessor(objPack, addr);
		JSONArray perfArray = (JSONArray) json.get("counters");
		if (perfArray != null) {
			PerfCounterPack perfPack = extractPerfCounterPack(perfArray, objPack.objName);
			passToNetDataProcessor(perfPack, addr);
		}
	}
}
 
开发者ID:scouter-project,项目名称:scouter,代码行数:14,代码来源:CounterHandler.java


示例8: extractPerfCounterPack

import scouter.lang.pack.PerfCounterPack; //导入依赖的package包/类
private static PerfCounterPack extractPerfCounterPack(JSONArray perfJson, String objName) {
	PerfCounterPack perfPack = new PerfCounterPack();
	perfPack.time = System.currentTimeMillis();
	perfPack.timetype = TimeTypeEnum.REALTIME;
	perfPack.objName = objName;
	for (int i = 0; i < perfJson.size(); i++) {
		JSONObject perf = (JSONObject) perfJson.get(i);
		String name = (String) perf.get("name");
		Number value = (Number) perf.get("value");
		perfPack.data.put(name, new FloatValue(value.floatValue()));
	}
	return perfPack;
}
 
开发者ID:scouter-project,项目名称:scouter,代码行数:14,代码来源:CounterHandler.java


示例9: sendBatchService

import scouter.lang.pack.PerfCounterPack; //导入依赖的package包/类
public void sendBatchService(long currentTime){
	if(server == null){
		return;
	}
	
	checkBatchService(currentTime);
	updateBatchService();
	PerfCounterPack[] pks = cb.getList();
	sendCounter(pks);
}
 
开发者ID:scouter-project,项目名称:scouter,代码行数:11,代码来源:StatusSender.java


示例10: updateBatchService

import scouter.lang.pack.PerfCounterPack; //导入依赖的package包/类
private void updateBatchService(){
	PerfCounterPack pack = cb.getPack(conf.getObjName(), TimeTypeEnum.REALTIME);
	UdpLocalServer localServer = UdpLocalServer.getInstance();
	pack.put(CounterConstants.BATCH_SERVICE, new DecimalValue(Main.batchMap.size()));
	pack.put(CounterConstants.BATCH_START, new DecimalValue(localServer.getStartBatchs()));
	pack.put(CounterConstants.BATCH_END, new DecimalValue(localServer.getEndBatchs()));
	pack.put(CounterConstants.BATCH_ENDNOSIGNAL, new DecimalValue(localServer.getEndNoSignalBatchs()));
}
 
开发者ID:scouter-project,项目名称:scouter,代码行数:9,代码来源:StatusSender.java


示例11: process

import scouter.lang.pack.PerfCounterPack; //导入依赖的package包/类
@Counter
public void process(CounterBasket pw) {
	if (availableFdInfo == false) {
		 return;
	}
	
	// Currently supported only sun jvm on unix platform
	try {
		OperatingSystemMXBean os = ManagementFactory.getOperatingSystemMXBean();
		if(os instanceof UnixOperatingSystemMXBean){
			UnixOperatingSystemMXBean unixOs = (UnixOperatingSystemMXBean) os;
			long max = unixOs.getMaxFileDescriptorCount();
			long open = unixOs.getOpenFileDescriptorCount();
			
			ListValue fdUsage = new ListValue();
			fdUsage.add(max);
			fdUsage.add(open);
			
			PerfCounterPack p = pw.getPack(TimeTypeEnum.REALTIME);
			p.put(CounterConstants.JAVA_FD_USAGE, fdUsage);
		} else {
			availableFdInfo = false;
		}
	} catch (Throwable th) {
		Logger.println(th.getMessage());
		availableFdInfo = false;
	}
}
 
开发者ID:scouter-project,项目名称:scouter,代码行数:29,代码来源:FDInfo.java


示例12: extractJmx

import scouter.lang.pack.PerfCounterPack; //导入依赖的package包/类
@Counter
public void extractJmx(CounterBasket pw) {
    if (conf.counter_custom_jmx_enabled == false || mBeanServerEnable == false) {
        return;
    }
    StringSet nameSet = conf.getCustomJmxSet();
    if (nameSet.size() < 1) {
        return;
    }
    if (mBeanServer == null) {
        mBeanServer = LazyPlatformMBeanServer.create();
    }
    try {
        if (mBeanServer.checkInit()) {
            StringEnumer stringEnumer = nameSet.keys();
            PerfCounterPack pack = pw.getPack(TimeTypeEnum.REALTIME);
            while (stringEnumer.hasMoreElements()) {
                String next = stringEnumer.nextString();
                String[] mbeanAndAttribute = StringUtil.split(next, "|");
                if (mbeanAndAttribute.length != 3) continue;
                float value = mBeanServer.getValue(mbeanAndAttribute[1], mbeanAndAttribute[2]);
                if (value >= 0) {
                    pack.put(mbeanAndAttribute[0], new FloatValue(value));
                }
            }
        }
    } catch (Exception e) {
        Logger.println("SC-555", e.getMessage(), e);
        mBeanServerEnable = false;
    }

}
 
开发者ID:scouter-project,项目名称:scouter,代码行数:33,代码来源:CustomJmx.java


示例13: recentUser

import scouter.lang.pack.PerfCounterPack; //导入依赖的package包/类
@Counter
public void recentUser(CounterBasket pw) {

	int users =MeterUsers.getUsers();
	
	PerfCounterPack p = pw.getPack(TimeTypeEnum.REALTIME);	
	p.put(CounterConstants.WAS_RECENT_USER, new DecimalValue(users));

	p = pw.getPack(TimeTypeEnum.FIVE_MIN);
	p.put(CounterConstants.WAS_RECENT_USER, new DecimalValue(users));
}
 
开发者ID:scouter-project,项目名称:scouter,代码行数:12,代码来源:ClientUser.java


示例14: process

import scouter.lang.pack.PerfCounterPack; //导入依赖的package包/类
public void process(CounterBasket pw) throws IOException {
	Configure conf = Configure.getInstance();

	boolean redisEnabled = conf.getBoolean("redis_enabled", false);

	if (redisEnabled) {
		String serverIp = conf.getValue("redis_server_ip", "127.0.0.1");
		int serverPort = conf.getInt("redis_server_port", 6379);

		String perfInfo = getRedisPerfInfo(serverIp, serverPort);

		String[] lines = perfInfo.split("\n");

		PerfCounterPack p = pw.getPack(conf.getObjName(), TimeTypeEnum.REALTIME);

		for (String line : lines) {
			String key = line.substring(0, line.indexOf(':'));
			String value = line.substring(line.indexOf(':') + 1);

			if (floatSet.contains(key)) {
				p.put(key, new FloatValue(Float.valueOf(value.trim())));
			}

			if (decimalSet.contains(key)) {
				p.put(key, new DecimalValue(Long.valueOf(value.trim())));
			}
		}
	}
}
 
开发者ID:scouter-project,项目名称:scouter,代码行数:30,代码来源:RedisMonitor.java


示例15: counter

import scouter.lang.pack.PerfCounterPack; //导入依赖的package包/类
@ServerPlugin(PluginConstants.PLUGIN_SERVER_COUNTER)
 public void counter(PerfCounterPack pack) {
     String objName = pack.objName;
     int objHash = HashUtil.hash(objName);
     String objType = null;
     String objFamily = null;

     if (AgentManager.getAgent(objHash) != null) {
     	objType = AgentManager.getAgent(objHash).objType;
     }
     
     if (objType != null) {
     	objFamily = CounterManager.getInstance().getCounterEngine().getObjectType(objType).getFamily().getName();
     }
     
     try {
      // in case of objFamily is javaee
      if (CounterConstants.FAMILY_JAVAEE.equals(objFamily)) {
      	// save javaee type's objHash
      	if (!javaeeObjHashList.contains(objHash)) {
      		javaeeObjHashList.add(objHash);
      	}
      	
      	if (pack.timetype == TimeTypeEnum.REALTIME) {
      		long gcTimeThreshold = conf.getLong("ext_plugin_gc_time_threshold", 0);
      		long gcTime = pack.data.getLong(CounterConstants.JAVA_GC_TIME);

      		if (gcTimeThreshold != 0 && gcTime > gcTimeThreshold) {
      			AlertPack ap = new AlertPack();
      			
  		        ap.level = AlertLevel.WARN;
  		        ap.objHash = objHash;
  		        ap.title = "GC time exceed a threshold.";
  		        ap.message = objName + "'s GC time(" + gcTime + " ms) exceed a threshold.";
  		        ap.time = System.currentTimeMillis();
  		        ap.objType = objType;
  				
  		        alert(ap);
      		}
      	}
  	}
     } catch (Exception e) {
Logger.printStackTrace(e);
     }
 }
 
开发者ID:scouter-project,项目名称:scouter-plugin-server-alert-line,代码行数:46,代码来源:LinePlugin.java


示例16: counter

import scouter.lang.pack.PerfCounterPack; //导入依赖的package包/类
/**
  * PerfCounterPack 발생 시 처리
  * @param pack
  */
 @ServerPlugin(PluginConstants.PLUGIN_SERVER_COUNTER)
 public void counter(PerfCounterPack pack) {
     String objName = pack.objName;
     int objHash = HashUtil.hash(objName);
     String objType = null;
     String objFamily = null;

     if (AgentManager.getAgent(objHash) != null) {
     	objType = AgentManager.getAgent(objHash).objType;
     }
     
     if (objType != null) {
try {
	objFamily = CounterManager.getInstance().getCounterEngine().getObjectType(objType).getFamily().getName();
} catch (Exception e) {
	objFamily = objType;
}
     }
     
     // objFamily가 host인 경우
     if (CounterConstants.FAMILY_HOST.equals(objFamily)) {
     	if (hostAgentStatMap.get(objHash) == null) {
     		hostAgentStatMap.put(objHash, new HostAgentStat(objHash));
     	}
     	
     	if (pack.timetype == TimeTypeEnum.REALTIME) {
         	hostAgentStatMap.get(objHash).addMax(pack.data.getFloat(CounterConstants.HOST_CPU), 
         			pack.data.getInt(CounterConstants.HOST_MEM_TOTAL), 
         			pack.data.getFloat(CounterConstants.HOST_MEM), 
         			pack.data.getInt(CounterConstants.HOST_MEM_USED), 
         			pack.data.getInt(CounterConstants.HOST_NET_TX_BYTES), 
         			pack.data.getInt(CounterConstants.HOST_NET_RX_BYTES), 
         			pack.data.getInt(CounterConstants.HOST_DISK_READ_BYTES), 
         			pack.data.getInt(CounterConstants.HOST_DISK_WRITE_BYTES));
     	} else if (pack.timetype == TimeTypeEnum.FIVE_MIN) {
     		// NET_TX, NET_RX, DISK_READ, DISK_WRITE 정보는 FIVE_MIN에 포함되지 않음.
         	hostAgentStatMap.get(objHash).addAvg(pack.data.getFloat(CounterConstants.HOST_CPU), 
         			pack.data.getFloat(CounterConstants.HOST_MEM), 
         			pack.data.getInt(CounterConstants.HOST_MEM_USED));
         }
     }
     
     // objFamily가 javaee인 경우
     if (CounterConstants.FAMILY_JAVAEE.equals(objFamily)) {
     	if (javaAgentStatMap.get(objHash) == null) {
     		javaAgentStatMap.put(objHash, new JavaAgentStat(objHash));
     	}
     	
     	if (pack.timetype == TimeTypeEnum.REALTIME) {
     		// JAVA_HEAP_TOT_USAGE 정보가 없는 PerfCounterPack은 host agent가 동작중에 PROC_CPU 정보를 보내주는 경우와, FIVE_MIN 밖에 없음.
     		// PROC_CPU 정보는 수집 대상이 아님.
         	ListValue lv = pack.data.getList(CounterConstants.JAVA_HEAP_TOT_USAGE);
         	
         	if (lv != null && lv.size() > 0) {
                 javaAgentStatMap.get(objHash).addMax(pack.data.getInt(CounterConstants.WAS_ACTIVE_SERVICE), 
                 		lv.getFloat(0), 
                 		pack.data.getFloat(CounterConstants.JAVA_HEAP_USED), 
                 		pack.data.getInt(CounterConstants.WAS_RECENT_USER), 
                 		pack.data.getInt(CounterConstants.WAS_SERVICE_COUNT), 
                 		pack.data.getFloat(CounterConstants.WAS_APICALL_TPS), 
                 		pack.data.getFloat(CounterConstants.WAS_SQL_TPS), 
                 		pack.data.getFloat(CounterConstants.WAS_TPS));
         	}
     	} else if (pack.timetype == TimeTypeEnum.FIVE_MIN) {
     		if (pack.data.toMap().get(CounterConstants.PROC_CPU) == null) {
              javaAgentStatMap.get(objHash).addAvg(pack.data.getInt(CounterConstants.WAS_ACTIVE_SERVICE), 
              		pack.data.getFloat(CounterConstants.JAVA_HEAP_USED), 
              		pack.data.getInt(CounterConstants.WAS_RECENT_USER), 
              		pack.data.getInt(CounterConstants.WAS_SERVICE_COUNT), 
                 		pack.data.getFloat(CounterConstants.WAS_APICALL_TPS), 
              		pack.data.getFloat(CounterConstants.WAS_SQL_TPS), 
              		pack.data.getFloat(CounterConstants.WAS_TPS));
     		}
     	}
 	}
 }
 
开发者ID:OpenSourceConsulting,项目名称:scouter-plugin-server-reporting,代码行数:81,代码来源:ReportingPlugin.java


示例17: counter

import scouter.lang.pack.PerfCounterPack; //导入依赖的package包/类
@ServerPlugin(PluginConstants.PLUGIN_SERVER_COUNTER)
public void counter(PerfCounterPack pack) {
    String objName = pack.objName;
    int objHash = HashUtil.hash(objName);
    String objType = null;
    String objFamily = null;

    if (AgentManager.getAgent(objHash) != null) {
    	objType = AgentManager.getAgent(objHash).objType;
    }

    if (objType != null) {
    	objFamily = CounterManager.getInstance().getCounterEngine().getObjectType(objType).getFamily().getName();
    }

    try {
      // in case of objFamily is javaee
      if (CounterConstants.FAMILY_JAVAEE.equals(objFamily)) {
      	// save javaee type's objHash
      	if (!javaeeObjHashList.contains(objHash)) {
      		javaeeObjHashList.add(objHash);
      	}

      	if (pack.timetype == TimeTypeEnum.REALTIME) {
      		long gcTimeThreshold = conf.getLong("ext_plugin_gc_time_threshold", 0);
      		long gcTime = pack.data.getLong(CounterConstants.JAVA_GC_TIME);

      		if (gcTimeThreshold != 0 && gcTime > gcTimeThreshold) {
      			AlertPack ap = new AlertPack();

  		        ap.level = AlertLevel.WARN;
  		        ap.objHash = objHash;
  		        ap.title = "GC time exceed a threshold.";
  		        ap.message = objName + "'s GC time(" + gcTime + " ms) exceed a threshold.";
  		        ap.time = System.currentTimeMillis();
  		        ap.objType = objType;

  		        alert(ap);
      		}
      	}
  	}
    } catch (Exception e) {
Logger.printStackTrace(e);
    }
}
 
开发者ID:scouter-project,项目名称:scouter-plugin-server-alert-slack,代码行数:46,代码来源:SlackPlugin.java


示例18: counter

import scouter.lang.pack.PerfCounterPack; //导入依赖的package包/类
@ServerPlugin(PluginConstants.PLUGIN_SERVER_COUNTER)
public void counter(final PerfCounterPack pack) {
    if (!enabled) {
        return;
    }

    if(pack.timetype != TimeTypeEnum.REALTIME) {
        return;
    }

    try {
        String objName = pack.objName;
        int objHash = HashUtil.hash(objName);
        String objType = AgentManager.getAgent(objHash).objType;
        String objFamily = CounterManager.getInstance().getCounterEngine().getObjectType(objType).getFamily().getName();
        Point.Builder builder = Point.measurement(measurementName)
                .time(pack.time, TimeUnit.MILLISECONDS)
                .tag(tagObjName, objName)
                .tag(tagObjType, objType)
                .tag(tagObjFamily, objFamily);

        Map<String, Value> dataMap = pack.data.toMap();
        for (Map.Entry<String, Value> field : dataMap.entrySet()) {
            Value valueOrigin = field.getValue();
            if (valueOrigin == null) {
                continue;
            }
            Object value = valueOrigin.toJavaObject();
            if(!(value instanceof Number)) {
                continue;
            }
            String key = field.getKey();
            if("time".equals(key)) {
                continue;
            }
            builder.addField(key, (Number)value);
        }
        Point point = builder.build();

        if (isUdp) {
            String line = point.lineProtocol();
            udpAgent.write(line);
            //System.out.println(line);
        } else { // http
            influx.write(dbName, retentionPolicy, point);
        }

    } catch (Exception e) {
        if (conf._trace) {
            Logger.printStackTrace("IFLX001", e);
        } else {
            Logger.println("IFLX002", e.getMessage());
        }
    }
}
 
开发者ID:scouter-project,项目名称:scouter-plugin-server-influxdb,代码行数:56,代码来源:InfluxdbPlugin.java


示例19: getPack

import scouter.lang.pack.PerfCounterPack; //导入依赖的package包/类
public PerfCounterPack getPack(byte timeType) {
	return getPack(Configure.getInstance().getObjName(), timeType);
}
 
开发者ID:scouter-project,项目名称:scouter,代码行数:4,代码来源:CounterBasket.java


示例20: getList

import scouter.lang.pack.PerfCounterPack; //导入依赖的package包/类
public PerfCounterPack[] getList() {
	return (PerfCounterPack[]) table.values().toArray(new PerfCounterPack[table.size()]);
}
 
开发者ID:scouter-project,项目名称:scouter,代码行数:4,代码来源:CounterBasket.java



注:本文中的scouter.lang.pack.PerfCounterPack类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Java ClassInfo类代码示例发布时间:2022-05-23
下一篇:
Java ArabicStemFilter类代码示例发布时间:2022-05-23
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap