在java开发中,遇到一个map的问题,请教一下高人。现在简单描述一下,有个class,叫A吧,A里面有个成员,是个map来的,(姑且不论是否static,hashtable还是hashmap,结果都是会出错) A有个method是把硬盘读文件(byte[],其实是个xml格式的文件),然后加到map里,以后再遇到同样的文件名(key),就从map里面拿出来。map里面的value定义是对象,如果把byte[]传递过去会发生莫名其妙的事情,就是xml文件中某个tag的值莫名其妙变化了。但是,如果在ide里面写个main,在那里不论你怎么get啊put啊,拿到的byte[]都是一致的。但如果是在server上,我是指ide的test env上,拿出来的byte[]就和放进去的不一致。server上大致是,每个对于不同数据的更新都对应到一个A实例,而且是server启动的时候做类似线程池的工作,new了很多class A。如果把byte[]转化为一个String再存取,那不会没出错。大家遇到过这种问题吗?
还有个类似的问题,就是在我用的java架构里面,有个把数据存储在session的工具,其底层据说也是map,就是根据类型为String的key,存取bean的。这里面存取的也定义为object,但我有时候要把数据准备为byte[],为了download pdf什么的做数据准备。用这个工具存byte[]也会出错,最后用一个很丑的办法,把一个个byte弄成很多Byte,放进ArrayList里面,再把ArrayList通过工具放进session,烦死了。
在java的教材里面不是说array也是对象嘛,怎么会出错?是不是by reference的问题?
最后我自己简单写了个linked list来替代map,结果没问题。又写了个简单的hashtable,也没问题。这下我彻底傻眼了。
最近写东西乱七八糟的,大家看明白了没有?