int i=0;
.....
........if (c.equals("#")){
 i++;
 if (i==4) stopIt(); 
}
else i=0;

解决方案 »

  1.   

    to zhblue(歪嘴鱼):我晕,随个随个字符来读呀??要是不是四个#,而是#*(),那你的循环岂不更复杂了??
      

  2.   

    to gongcaihua(cgrs):
    所以才要一边读一边写呀
      

  3.   


    可能要用一个数组来缓存
    用endsWith("#")endsWith("##")endsWith("###")endsWith("####")来判断是否以这些东西结尾,然后再与下一次读取的数组的startsWith("#")startsWith("##")startsWith("###")startsWith("####")来判断是否是连续的<####>
      

  4.   

    to all:能不能说得详细一点呀??
    最好有源码参考
      

  5.   

    做2个 String
    第一次读的 1024 存到第一个 String
    然后读第二次 1024 存到 第二个 String
    然后 str1+str2.indexOf("####");
    有 #### 停止
    没有 #### 存储str1 >>> str1 = str2 >>> 提取新的 str2
    again & again
      

  6.   

    因为是从一socket的inputstream中连续读取一个很大的字符串,所以可以考虑先把所有的一起读完,保存到一个临时文件,然后对这个临时文件进行处理。这样比一面读socket一面处理的效果要好一点。
      

  7.   

    说的意思就是啊java.io.Serializable
      

  8.   

    其实,应该用PushBackReader,效率最高。
      

  9.   

    to  onefox(一品狐):
    做两个string会读过头了,下一状态处理的时候由于读不到该读的数据会出错的,
    所以必须保证一读到####时马上转换状态to  jkit(郁闷的程序员):
    不太可能,因为你不知道什么时候读完了
    socket流是一直传输的,存成文件没有结束符,缺点同上to  gongcaihua(cgrs)、dinosaur_cl() 
    具体怎么用啊??
      

  10.   

    用多线程,一个专门接收数据,一个专门处理数据。
    处理数据:每遇到“####”就把之前的数据全部处理并clear掉。
    接收数据:每次读到的一定量的数据和前面剩余的拼到一起。
    这样基本上能做到实时处理,并且不会有“####”被分断的问题。
      

  11.   

    String里有查找字符的方法,查找第一个'#';
    如果发现就连取四个字符;
    要设置一个计数器,这样在"####"出现在两个字符串时,保证在第一个字符串尾与第二个字符串头所取得字符一共是四个;
    看是否等于你的校验字符串"####"。
      

  12.   

    使用PushBackReader,每次读1024个字节,然后用indexof("####")来判断是否结束。
    如果没有找到,再用PushBackReader的unread(4)函数将已经读取得四个字节在压回去。
    然后再读1024个字节,这样就不后出现你所的那种情况啦。
      

  13.   

    to fengwb(fengwb):
    这样好像可行性稍高
      

  14.   

    to fengwb(fengwb):
    看还有没有更好的办法
    明天就结贴了
    分一定少不了你的