我现有一种socket数据,内容为:
         第一行:  IP地址+\n;
         第二行: 消息实体+\n;
         第三行: 消息实体+\n;         ..............说明:消息实体为一行字符串,整个socket数据也可能只有前两行,也可能有多行,应该怎样读取该数据?下面是我的代码,可能是我的设计不正确,程序总是在while((msg = reader_A.readLine())!=null),只执行一次就不向下执行了(是阻塞了还是内存耗尽了,我不太清楚,我的程序老报:java.lang.OutOfMemoryError: Java heap space),各位有好的取读方法请指教一下,给我指正一下我的代码也非常感谢!
                   private BufferedReader reader_A; private PrintWriter writer_A; public String Bip;// B方的IP; public String msgUnit; Socket socket;
                 //变量的实例化过程我不给出具体代码了,只贴关键部分                            reader_A = new BufferedReader(new InputStreamReader(socket
.getInputStream(), "utf8"));
String msg = "no data now";
         
                        while ((Bip = reader_A.readLine()) != null)// 此处会等待用户发送一次消息
{ // 条件中读取socket数据的头数据,该数据为B方IP
while((msg = reader_A.readLine())!=null){//取读消息实体

if (msg == "end#102") {//如果读到结束标识符了就把消息一次性发送出去
bMan.sendToB(msgUnit, Bip);// 调用发送方法,将消息 发送给B
break;//跳出内while
} else {//否则的话就再消息放到累加器中
msgUnit += msg;// 将收到的每行的消息汇总起来,一起向外发送
}
}
}

解决方案 »

  1.   

    代码的问题我找到原因了,原来发送数据时数据格式不小心写错了,大家说说这种数据有什么好的读取方法吗?
      

  2.   

    发送一行,读取一行,设置结束标志
      

  3.   

    发一行读一行,效率不高吧,我现在是发一段读一段,不过处理起来段中的回车换行有点麻烦,费了好大劲才读出来的。
      

  4.   

    你让放到线程里去运行才行的么。。