byte最后一次读取的长度比之前的要小。所以你byte数组尾巴那几位不是空的,是前一次读取的尾部。
设置长度是42或者更大时,你的byte数组一次性就把内容全部读取完了。while只执行一次,而设置为小于42的时候,就会多次执行while,把新读取的字节存放到byte数组中去。但是你最后一次的长度不是正好你设置的12而是6,所以新读取的6长度字节不能完全替换byte数组中前一次的数据。只能替换掉6个。因为数组长度是12,所以后6位还保存着前一次(倒数第二次读取)的数据。
可以这样修改,希望你能看懂。
int len = 0; // 字节长度while((len = fisread(b))>0){ // 将读取到的长度记录下来
foswrite(b,0,len); // 读取了多长的字节就写入多长的字节
}
所谓缓存,就是将程序或系统经常要调用的对象存在内存中,一遍其使用时可以快速调用,不必再去创建新的重复的实例。这样做可以减少系统开销,提高系统效率。缓存机制的实现有很多中,这里讲一种。
public class CacheImmutale{
//声明要缓存的类名;
private final String className;
//声明10个缓存池
private static CacheImmutale[] cache= new CachImmutale[10];
//记录缓存的位置,最新位置为[pos-1]
private static int pos=0;
//构造器
public CacheImmutale(String className){
thisclassName=className;
}
//返回方法
public String getName(){
return className;
}
//返回对象实例名,传进要使用的实例名,由该方法去判断缓存池中是否存在
public static CacheImmutale valueOf(String className){
//遍历缓存池,若存在,返回
for(int i=0;i
if(cache[i]!=null&&cache[i]getName()equals(className)){
return cache[i];
}
}
//如果缓存池满,则采取先进先出
if(pos==10){
cache[0]=new CacheImmutale(className);
pos=1;
return cache[0];
}
else{
cache[pos++]=new CacheImmutale(className);
return cache[pos-1];
}
}
public boolean equals(Object obj){
if(obj instanceof CacheImmutale){
CacheImmutale c1=(CacheImmutale)obj;
if(classNameequals(c1getName())){
return true;
}
}
return false;
}
public int hashCode(){
return classNamehashCode();
}
}
session最好少用,一般系统都用session来存储用户信息,session用多了对系统开销不好,缓存也尽量少用,要用的话都用在基本不会改变的数据上,不然会影响系统,如果经常改变的量,用了缓存,如:一个程序在用缓存中的数据,而另一个程序却在修改缓存的数据,那边程序就会出现不符合的数据了,如果回答对你有帮助,请把分给我吧,谢谢
因为你是要在tomcat启动的时候查询数据库,所以只能通过监听器,将查询数据库的代码放到监听器中,然后将数据封装到VO中,再讲这个VO存储到servletContext域中。
从servletContext中获取数据,你应该会。
你要实现的这个可能跟SpringMvc的关系不是很大。
你要达到的目的其实就是在jvm启动的时候把数据库数据加载一份到内存,一个静态变量和一个静态初始化块就可以搞定你的问题,这两者都是在类加载的时候初始化一次,像前面回答的一样,你可以用一个HashMap搞定。稍微具体来说,一个静态变量
publicstaticfinalMapcache=newHashMap()
static{
cache=请求数据库 *** 作
}
key你自己加,String还是int都行,value是你数据库的结构,可以写个实体。获取的时候直接cacheget(key)就可以了。
java如何从数据库读取数据并写入txt文件:
将数据查询出来放在list中,然后写入文件。
给你个写入的类,查询数据自己如果能搞定最好了。
FileWriterfileWriter=newFileWriter("c:\Resulttxt");
int[]a=newint[]{11112,222,333,444,555,666};
for(inti=0;i
fileWriterwrite(StringvalueOf(a[i])"");
}
fileWriterflush();
fileWriterclose();
上面例子中的a也可以是list。
以上就是关于请教高手 Java字节流 读取存数据于缓存时的问题全部的内容,包括:请教高手 Java字节流 读取存数据于缓存时的问题、java 缓存机制 实现的原理、java实现缓存技术等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)