请教 StringBuffer 使用问题,在线等,请指导

freey 2007-07-21 12:50:56
背景:通过TCP连接接收,要把收到的串根据指定的分割标志(H#H)分开,然后一条一条进行处理。每条消息的长度不会少于150,最长6000。
代码也下:
try{
int iLen = 0;
int iPos1 = 0;
int iPos2 = 0;
String sTmp = null;
while(true && chkFlg){
iLen = IS.read(bData);
if ( iLen > 0) {
sTmp = new String( bData);
sTmp = sTmp.trim();
strBuf.append(sTmp);
iPos1 = strBuf.indexOf("H#H");
iPos2 = strBuf.indexOf("H#P",iPos1+100);
while( iPos1>-1 && iPos2>iPos1 ){
sTmp = strBuf.substring(iPos1,iPos2);
strBuf.delete(iPos1, iPos2);
dealMsg(sTmp);
iPos1 = strBuf.indexOf("H#P");
iPos2 = strBuf.indexOf("H#P",iPos1+100);
}
System.arraycopy(bDump,0,bData,0,iBufSize);
}
if ( iLen==-1 ) {
break;
}
}
}
catch(IOException e){
}
问题:这段代码在Windows跑,不论分割符间的串有多长都正常,但放到Linux上就不行了,短些串没有问题,对于长些的串(比如大于1200的)就会出错,请帮忙看看问题在哪儿?
谢谢!!!
...全文
182 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
rainv 2007-07-21
  • 打赏
  • 举报
回复
出什么错呢?
freey 2007-07-21
  • 打赏
  • 举报
回复
服务器每次发过来的串不知道会是多长,要根据分割符号进行分割,因为不知道串有没有一次发完,所以要放在StringBuffer里,直到看到第二个分割符号,才把前边的一条完整地取出来。如果过来的都是几百个字符的短串,没有什么问题,但如果有长串,一次没有发完,下次才会发完,就出问题了,发现前一次没有处理留在StringBuffer中的串整个儿没有了,里边的内容全成了第二次发过来的了:
第一次过来的:H#H111111H#H2222222(近1500字符),不知道第二个串有没有结束所以只从StringBuffer中delete掉第一次的内容,这个时候看StringBuffer里的内容,是H#H2222222....,是正确的没有处理的未完的内容。
第二次收到的:222222222222222222222222222222(也有1000多字符)
这个时候看StringBuffer里的内容,全是第二次的内容了,前边保留的全没有了。
超级郁闷。。。
GeomaticMm 2007-07-21
  • 打赏
  • 举报
回复
照理说JAVA程序的可移植性很高 write once,run anywhere 不会出现这种问题啊 也不回事JRE版本不同产生的问题吧 最大的可能就是JRE的死角 可以直接提交给SUN了 哈哈
freey 2007-07-21
  • 打赏
  • 举报
回复
得不到正确的串,比如明明两个分割符号间的有2600个字符,结果老是得到1444个
而对于短的,如:H#HaaaaaaaaaaaaaaaaaaaaH#HbbbbbbbbbbbbbbbbbbbbbbbH#Hcccccccccccccccc这样的,能正确分开。
怀疑append和delete操作有冲突,但不知道如何解决,另外,为什么在Windows上跑就什么问题都不出呢

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧