从服务器加载文件到内存

从服务器加载文件到内存,第1张

AB资源打包后有一个目录文件AssetBundle,他保存了所有AB资源的路径与名称,
通过aLLAssetBundleURL链接路径 组拼 从目录文件获得的AB资源的名字,然后再协程方法内编写相关代码,从而实现从服务器加载资源的功能。详细见代码。
using SystemCollections;
using SystemCollectionsGeneric;
using UnityEngine;
using UnityEngineNetworking;
using SystemIO;

public class DownLoadAssetBundle : MonoBehaviour
{
//AB资源文件保存在服务器中的位置(我的服务器寄了,加载不到了)
private string mainAssetBundleURL = @">对weblogic进行配置一般是通过console控制台来进行配置的 但有的时候 需要自己在程序中需要进行动态的配置 比如增加队列 显示队列 或者配置数据源 改写写config xml 是可以达到动态配置的效果的 但bea不推荐这样做 而且这样做需要重新启动服务器 怎么样既动态的配置 又不重新启动服务器呢?笔者查询了weblogic的网站 了解到有两种方法动态的配置( )可以使用weblogic Admin命令(文档地址 ) ( )使用weblogic是用jmx编程来进行管理 通过jmx来对weblogic中的组件进行动态的配置 jmx的文档地址 如果使用这种方法 要将weblogic jar配置到CLASSPATH环境变量中(因为weblogic的jmx类是放在weblogic jar中的)本人写了一份代码 对Queue进行管理 包括JMSQueue的增加 删除 和显示 我的config xml文件如下 <JMSServer Name= MessageCenterServer Store= MyJmsSave Targets= myserver TemporaryTemplate= MyJMSTemplate ><JMSQueue CreationTime= JNDIName= CenterQueue Name= CenterQueue Template= MyJMSTemplate /><JMSQueue CreationTime= JNDIName= que Name= que Template= MyJMSTemplate /><JMSQueue CreationTime= JNDIName= que Name= que Template= MyJMSTemplate /><JMSQueue CreationTime= JNDIName= queue Name= queue /></JMSServer>代码如下 package messagecenter;/ <p>Title: 消息中心</p> <p>Description: 对消息队列进行维护</p> @author 张荣斌 @version /import java util ;import java util regex Pattern;import javax naming Context;import weblogic jndi Environment;import weblogic management MBeanHome;import weblogic management runtime ServletRuntimeMBean;import weblogic management runtime ApplicationRuntimeMBean;import weblogic management runtime WebAppComponentRuntimeMBean;import weblogic management runtime ComponentRuntimeMBean;import weblogic jms extensions ;import weblogic management RemoteMBeanServer;import javax management ObjectName;import javax management QueryExp;public class JMSQueueMaintain {public static final String WEBLOGIC_URL = t ://localhost: ;public static final String WEBLOGIC_USER= system ;public static final String WEBLOGIC_PASSWORD = ;public static final String WEBLOGIC_JMSSERVER = MessageCenterServer ; //JMS服务器的名字 可以看到我的config xml<JMSServerName= MessageCenterServer Store= MyJmsSave 这一行public JMSQueueMaintain() {}/ 得到initial context/private static Context getCtx(String url String username String password) throws Exception{Environment env = new Environment();env setProviderUrl(url);env setSecurityPrincipal(username);env setSecurityCredentials(password);return env getInitialContext();}/ 得到the Admin MBean Home/private static MBeanHome getMBeanHome(String url String username String password) throws Exception{return (MBeanHome) getCtx(url username password) lookup(MBeanHome ADMIN_JNDI_NAME);}/ 增加队列/public static void addQueue(String queuename) throws Exception{Context ctx = getCtx(WEBLOGIC_URL WEBLOGIC_USER WEBLOGIC_PASSWORD);JMSHelper createPermanentQueueAsync(ctx WEBLOGIC_JMSSERVER queuename queuename);}/ 删除队列/public static void deleteQueue(String queuename) throws Exception{Context ctx = getCtx(WEBLOGIC_URL WEBLOGIC_USER WEBLOGIC_PASSWORD);JMSHelper deletePermanentQueue(ctx WEBLOGIC_JMSSERVER queuename);}/ 得到所有的队列名/public static Vector getQueuenames() throws Exception{Vector vect = new Vector();MBeanHome home = getMBeanHome(WEBLOGIC_URL WEBLOGIC_USER WEBLOGIC_PASSWORD);RemoteMBeanServer homeServer = null;QueryExp query = null;homeServer = home getMBeanServer();Set JMSMBeans = homeServer queryNames(new ObjectName( mydomain:JMSServer= +WEBLOGIC_JMSSERVER+ Type=JMSQueue ) query);//where query could be any object that implements the JMX//javax managementQueryExpfor (Iterator itr = erator(); itr hasNext(); ) {ObjectName mbean = (ObjectName)itr next();if(!mbean getKeyProperty( Name ) equals( CenterQueue )){vect addElement(mbean getKeyProperty( Name ));}}return vect;}public static void main(String[] args) {JMSQueueMaintain JMSQueueMaintain = new JMSQueueMaintain();try{System out println(JMSQueueMaintain getQueuenames());JMSQueueMaintain addQueue( queue );JMSQueueMaintain deleteQueue( queue );System out println(JMSQueueMaintain getQueuenames());}catch(Exception e){}}} lishixinzhi/Article/program/Java/ky/201311/28614

常用的集合类有一下几种:
List结构的集合类:ArrayList类,LinkedList类,Vector类,Stack类
Map结构的集合类:HashMap类,Hashtable类
Set结构的集合类:HashSet类,TreeSet类
Queue结构的集合:Queue接口

HashMap和Hashtable的区别:
HashMap和Hashtable都是java的集合类,都可以用来存放java对象,这是他们的相同点
以下是他们的区别:
1历史原因:
Hashtable是基于陈旧的Dictionary类的,HashMap是java 12引进的Map接口的一个现实。
2同步性:
Hashtable是同步的,这个类中的一些方法保证了Hashtable中的对象是线程安全的,而HashMap则是异步的,因此HashMap中的对象并不是线程安全的,因为同步的要求会影响执行的效率,所以如果你不需要线程安全的结合那么使用HashMap是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销,从而提高效率,我们一般所编写的程序都是异步的,但如果是服务器端的代码除外。
3值:
HashMap可以让你将空值作为一个表的条目的key或value
Hashtable是不能放入空值(null)的

ArrayList和Vector的区别:
ArrayList与Vector都是java的集合类,都是用来存放java对象,这是他们的相同点,
区别:
1同步性:
Vector是同步的,这个类的一些方法保证了Vector中的对象的线程安全的,而ArrayList则是异步的,因此ArrayList中的对象并不 是线程安全的,因为同步要求会影响执行的效率,所以你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必 要的性能开销。
2数据增长:
从内部实现的机制来讲,ArrayList和Vector都是使用数组(Array)来控制集合中的对象,当你向两种类型中增加元素的时候,如果元素的数目超过了内部数组目前的长度他们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大,所以如果你要在集合中保存大量的数据,那么使用Vector有一些优势,因为你可以通过设置集合的初始大小来避免不必要的资源开销。

总结:
1)如果要求线程安全,使用Vector,Hashtable
2)如果不要求线程安全,使用ArrayList,LinkedList,HashMap
3)如果要求键值对,则使用HashMap,Hashtable
4)如果数据量很大,又要求线程安全考虑Vector

1.ArrayList: 元素单个,效率高,多用于查询
2.Vector: 元素单个,线程安全,多用于查询
3.LinkedList:元素单个,多用于插入和删除
4.HashMap: 元素成对,元素可为空
5.HashTable: 元素成对,线程安全,元素不可为空

ArrayList
底层是Object数组,所以ArrayList具有数组的查询速度快的优点以及增删速度慢的缺点。
而在LinkedList的底层是一种双向循环链表。在此链表上每一个数据节点都由三部分组成:前指针(指向前面的节点的位置),数据,后指针(指向后面的节点的位置)。最后一个节点的后指针指向第一个节点的前指针,形成一个循环。
双向循环链表的查询效率低但是增删效率高。
ArrayList和LinkedList在用法上没有区别,但是在功能上还是有区别的。

LinkedList
经常用在增删 *** 作较多而查询 *** 作很少的情况下:队列和堆栈。
队列:先进先出的数据结构。
栈:后进先出的数据结构。
注意:使用栈的时候一定不能提供方法让不是最后一个元素的元素获得出栈的机会。

Vector
(与ArrayList相似,区别是Vector是重量级的组件,使用使消耗的资源比较多。)
结论:在考虑并发的情况下用Vector(保证线程的安全)。
在不考虑并发的情况下用ArrayList(不能保证线程的安全)。

面试经验(知识点):
javautilstack(stack即为堆栈)的父类为Vector。可是stack的父类是最不应该为Vector的。因为Vector的底层是数组,且Vector有get方法(意味着它可能访问到并不属于最后一个位置元素的其他元素,很不安全)。
对于堆栈和队列只能用push类和get类。
Stack类以后不要轻易使用。
实现栈一定要用LinkedList。
(在JAVA15中,collection有queue来实现队列。)

Set-HashSet实现类:
遍历一个Set的方法只有一个:迭代器(interator)。
HashSet中元素是无序的(这个无序指的是数据的添加顺序和后来的排列顺序不同),而且元素不可重复。
在Object中除了有finalize(),toString(),equals(),还有hashCode()。
HashSet底层用的也是数组。
当向数组中利用add(Object o)添加对象的时候,系统先找对象的hashCode:
int hc=ohashCode(); 返回的hashCode为整数值。
Int I=hc%n;(n为数组的长度),取得余数后,利用余数向数组中相应的位置添加数据,以n为6为例,如果I=0则放在数组a[0]位置,如果I=1,则 放在数组a[1]位置。如果equals()返回的值为true,则说明数据重复。如果equals()返回的值为false,则再找其他的位置进行比 较。这样的机制就导致两个相同的对象有可能重复地添加到数组中,因为他们的hashCode不同。
如果我们能够使两个相同的对象具有相同hashcode,才能在equals()返回为真。
在实例中,定义student对象时覆盖它的hashcode。
因为String类是自动覆盖的,所以当比较String类的对象的时候,就不会出现有两个相同的string对象的情况。
现在,在大部分的JDK中,都已经要求覆盖了hashCode。
结论:如将自定义类用hashSet来添加对象,一定要覆盖hashcode()和equals(),覆盖的原则是保证当两个对象hashcode返回相同的整数,而且equals()返回值为True。
如果偷懒,没有设定equals(),就会造成返回hashCode虽然结果相同,但在程序执行的过程中会多次地调用equals(),从而影响程序执行的效率。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zz/13438692.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-06
下一篇 2023-08-06

发表评论

登录后才能评论

评论列表(0条)

保存