新手求助,我的文件写到32k大小,就再也写不进去了~~~~~~~~~~~``
写文件时的代码是如下函数:
synchronized public int settelsendstate(string stel, int state, int type) {
// state 1 send ok, 2 send fail, 3 sending
tellog srtn = (tellog) (htelsended.get(stel));
if (srtn != null) { // found in hashtable, remove first
htelsended.remove(stel);
}
srtn = new tellog(stel, state, 0);
srtn.setstate(state);
htelsended.put(stel, srtn); // insert to hashtable
if (type == 1) {
return 1;
}
fileoutputstream fos = null;
bufferedwriter logwriter = null;
try {
fos = new fileoutputstream(stellogfn, true);
byte[] b = srtn.getallstring().getbytes();
//synchronized (fos) {
fos.write(b);
fos.close();
//}
return 1;
}
catch (exception e) {
e.printstacktrace();
return -2;
}
}
}
调用此函数前还有一个打开文件,使用如下函数。打开文件取得数据后,就是不停调用上面的函数一直写,
private void loadsendedtel() {//load all tel send state //remove old state with file tel state
debugout.println("load sended tel from :" + stellogfn);
fileinputstream fis = null;
bufferedreader logreader = null;
int lenf = 0;
byte[] b;
try {
file f = new file(stellogfn);
if (!f.exists()) {
return;
}
fis = new fileinputstream(stellogfn);
lenf = (int) (f.length());
debugout.println(stellogfn + " lenth:" + lenf);
b = new byte[lenf];
int nread = fis.read(b, 0, lenf);
debugout.println(stellogfn + " got:" + nread);
fis.close();
}
catch (exception e) {
e.printstacktrace();
return;
}
int i = 0;
while (i + 29 < lenf) {
string stemp = new string(b, i, 29);
tellog tl = new tellog(stemp);
debugout.println("ppgrequest: sendedtel" + stemp);
htelsended.remove(tl.tel); // remove old first
htelsended.put(tl.tel, tl); // user tel as key
i += 29;
}
}
不知道怎么回事写到32160个字节时就写不下去了,但是如果退出程序再启动再重新打开这个文件(32k的,以前初始打开时是0k的),则又可以写了,但也只能写到64k大小又写不下去了,各位帮我看看怎么回事?非常感谢!!
推荐阅读
你应该做一个缓冲,读一些(比如4k),写一些,再读再写,否则一个2g的东西你也想一下子写下去吗?
结贴给分吧。
.

讨论区