stringBuffer处理不了那么多数据的
他没有string处理的多,但是快

解决方案 »

  1.   

    webLogic 问题如下:- java.io.IOException:
    java.net.SocketException: Connection reset by peer: socket write error
            at java.net.SocketOutputStream.socketWrite0(Native Method)
            at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
            at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
            at weblogic.servlet.internal.ChunkUtils.writeHeaderChunk(ChunkUtils.java
    :212)
            at weblogic.servlet.internal.ResponseHeaders.writeHeaders(ResponseHeader
    s.java:451)
            at weblogic.servlet.internal.ServletResponseImpl.writeHeaders(ServletRes
    ponseImpl.java:976)
            at weblogic.servlet.internal.ServletOutputStreamImpl.sendHeaders(Servlet
    OutputStreamImpl.java:244)
            at weblogic.servlet.internal.ServletOutputStreamImpl.flush(ServletOutput
    StreamImpl.java:121)
            at sun.nio.cs.StreamEncoder$CharsetSE.implFlush(StreamEncoder.java:408)
            at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:150)
            at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:213)
            at java.io.BufferedWriter.flush(BufferedWriter.java:230)
            at org.apache.axis.Message.writeTo(Message.java:441)
            at org.apache.axis.transport.http.AxisServlet.sendResponse(AxisServlet.j
    ava:1018)
            at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:89
    5)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
            at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBas
    e.java:339)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
            at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run
    (ServletStubImpl.java:1053)
            at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
    pl.java:387)
            at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
    pl.java:305)
            at weblogic.servlet.internal.WebAppServletContext$ServletInvocationActio
    n.run(WebAppServletContext.java:6291)
            at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate
    dSubject.java:317)
            at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:
    97)
            at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppSe
    rvletContext.java:3575)
            at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestIm
    pl.java:2573)
            at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:178)
            at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:151)
    - java.io.IOException:
    java.net.SocketException: Connection reset by peer: socket write error
            at java.net.SocketOutputStream.socketWrite0(Native Method)
            at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
            at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
            at weblogic.servlet.internal.ChunkUtils.writeHeaderChunk(ChunkUtils.java
    :212)
            at weblogic.servlet.internal.ResponseHeaders.writeHeaders(ResponseHeader
    s.java:451)
            at weblogic.servlet.internal.ServletResponseImpl.writeHeaders(ServletRes
    ponseImpl.java:976)
            at weblogic.servlet.internal.ServletOutputStreamImpl.sendHeaders(Servlet
    OutputStreamImpl.java:244)
            at weblogic.servlet.internal.ServletOutputStreamImpl.flush(ServletOutput
    StreamImpl.java:121)
            at sun.nio.cs.StreamEncoder$CharsetSE.implFlush(StreamEncoder.java:408)
            at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:150)
            at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:213)
            at java.io.BufferedWriter.flush(BufferedWriter.java:230)
            at org.apache.axis.Message.writeTo(Message.java:441)
            at org.apache.axis.transport.http.AxisServlet.sendResponse(AxisServlet.j
    ava:1018)
            at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:89
    5)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
            at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBas
    e.java:339)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
            at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run
    (ServletStubImpl.java:1053)
            at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
    pl.java:387)
            at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
    pl.java:305)
            at weblogic.servlet.internal.WebAppServletContext$ServletInvocationActio
    n.run(WebAppServletContext.java:6291)
            at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate
    dSubject.java:317)
            at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:
    97)
            at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppSe
    rvletContext.java:3575)
            at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestIm
    pl.java:2573)
            at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:178)
            at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:151)
    - java.io.IOException:
    java.net.SocketException: Connection reset by peer: socket write error
            at java.net.SocketOutputStream.socketWrite0(Native Method)
            at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
            at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
            at weblogic.servlet.internal.ChunkUtils.writeHeaderChunk(ChunkUtils.java
    :212)
            at weblogic.servlet.internal.ResponseHeaders.writeHeaders(ResponseHeader
    s.java:451)
            at weblogic.servlet.internal.ServletResponseImpl.writeHeaders(ServletRes
    ponseImpl.java:976)
            at weblogic.servlet.internal.ServletOutputStreamImpl.sendHeaders(Servlet
    OutputStreamImpl.java:244)
            at weblogic.servlet.internal.ServletOutputStreamImpl.flush(ServletOutput
    StreamImpl.java:121)
            at sun.nio.cs.StreamEncoder$CharsetSE.implFlush(StreamEncoder.java:408)
            at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:150)
            at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:213)
            at java.io.BufferedWriter.flush(BufferedWriter.java:230)
            at org.apache.axis.Message.writeTo(Message.java:441)
            at org.apache.axis.transport.http.AxisServlet.sendResponse(AxisServlet.j
    ava:1018)
            at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:89
    5)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
            at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBas
    e.java:339)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
            at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run
    (ServletStubImpl.java:1053)
            at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
    pl.java:387)
            at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
    pl.java:305)
            at weblogic.servlet.internal.WebAppServletContext$ServletInvocationActio
    n.run(WebAppServletContext.java:6291)
            at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate
    dSubject.java:317)
            at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:
    97)
            at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppSe
    rvletContext.java:3575)
            at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestIm
    pl.java:2573)
            at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:178)
            at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:151)题,好象stringBuffer 益处了
      

  2.   

    这个根本是你的设计有问题,你应该想办法规避这个问题。具体你要做什么?需要都加载到内存中吗?直接一边生成一边write到服务器不行吗?
      

  3.   

    错误应该是在Socket进行传输过程中产生的,可能是Socket的缓冲区溢出之类的问题。
    不过由于传输的Socket不属于你的控制范围,所以好像只好减少传输的数据量了
      

  4.   

    我是根据客户的要求生成响应的xml,而后对其进行解析处理,而后提交给客户端,我的服务器是2G,客户端最多有40个同时操作
      

  5.   

    如楼上的可能Socket的缓冲区溢出之类的问题是不是非要一次全部提交给客户端呢?
      

  6.   

    如上所说,应该是socket出了问题,而不是StringBuffer。你试下把最终生成的StringBuffer分批给socket传输。如果确实是StringBuffer的问题,那看看能否分成几个StringBuffer来做,做完后分几次给socket传输。然后改客户端的程序,在那边组合
      

  7.   

    类似如下程序:
     
     StringBuffer buffer = new StringBuffer(1024 * 16);
        for (int i = 0; i < 1000000; i++) {
          for(int k=0; k<10000;k++){
            buffer.append("a");
          }
        }
      

  8.   

    没有那么简单,我要传给客户端的是一个string
      

  9.   

    <?xml version="1.0" standalone="yes"?>
    <DATAPACKET Version="2.0">
    <METADATA>
    <FIELDS>
    <FIELD attrname="BsAr_ID" fieldtype="string" width="20"/>
    <FIELD attrname="BSAr_Name" fieldtype="string" width="50"/>
    <FIELD attrname="BsAr_PreID" fieldtype="string" width="20"/>
    <FIELD attrname="BsAr_AddPreID" fieldtype="string" width="50"/>
    </FIELDS>
    <PARAMS/>
    </METADATA>
    <ROWDATA>
    <ROW BsAr_ID="01" BSAr_Name="江苏" BsAr_PreID="" BsAr_AddPreID="01" />
    <ROW BsAr_ID="0101" BSAr_Name="南通" BsAr_PreID="01" BsAr_AddPreID="010101" />
    <ROW BsAr_ID="0102" BSAr_Name="南京" BsAr_PreID="01" BsAr_AddPreID="010102" />
    <ROW BsAr_ID="0103" BSAr_Name="徐州" BsAr_PreID="01" BsAr_AddPreID="010103" />
    <ROW BsAr_ID="0104" BSAr_Name="连云港" BsAr_PreID="01" BsAr_AddPreID="010104" />
    <ROW BsAr_ID="0105" BSAr_Name="苏州" BsAr_PreID="01" BsAr_AddPreID="010105" />
    <ROW BsAr_ID="0106" BSAr_Name="无锡" BsAr_PreID="01" BsAr_AddPreID="010106" />
    <ROW BsAr_ID="0107" BSAr_Name="昆山" BsAr_PreID="01" BsAr_AddPreID="010107" />
    <ROW BsAr_ID="02" BSAr_Name="山东" BsAr_PreID="" BsAr_AddPreID="02" />
    <ROW BsAr_ID="0201" BSAr_Name="济南" BsAr_PreID="02" BsAr_AddPreID="020201" />
    <ROW BsAr_ID="0202" BSAr_Name="淄博" BsAr_PreID="02" BsAr_AddPreID="020202" />
    <ROW BsAr_ID="0203" BSAr_Name="临沂" BsAr_PreID="02" BsAr_AddPreID="020203" />
    <ROW BsAr_ID="0204" BSAr_Name="枣庄" BsAr_PreID="02" BsAr_AddPreID="020204" />
    <ROW BsAr_ID="0205" BSAr_Name="开封" BsAr_PreID="02" BsAr_AddPreID="020205" />
    <ROW BsAr_ID="0206" BSAr_Name="青岛" BsAr_PreID="02" BsAr_AddPreID="020206" />
    <ROW BsAr_ID="0207" BSAr_Name="荷泽" BsAr_PreID="02" BsAr_AddPreID="020207" />
    <ROW BsAr_ID="0208" BSAr_Name="沪州" BsAr_PreID="02" BsAr_AddPreID="020208" />
    <ROW BsAr_ID="0209" BSAr_Name="成都" BsAr_PreID="02" BsAr_AddPreID="020209" />
    <ROW BsAr_ID="0210" BSAr_Name="自贡" BsAr_PreID="02" BsAr_AddPreID="020210" />
    <ROW BsAr_ID="0211" BSAr_Name="重庆" BsAr_PreID="02" BsAr_AddPreID="020211" />
    <ROW BsAr_ID="0212" BSAr_Name="宜宾" BsAr_PreID="02" BsAr_AddPreID="020212" />
    <ROW BsAr_ID="0213" BSAr_Name="泰安" BsAr_PreID="02" BsAr_AddPreID="020213" />
    <ROW BsAr_ID="0214" BSAr_Name="长沙" BsAr_PreID="02" BsAr_AddPreID="020214" />
    <ROW BsAr_ID="0215" BSAr_Name="烟台" BsAr_PreID="02" BsAr_AddPreID="020215" />
    <ROW BsAr_ID="0216" BSAr_Name="德州" BsAr_PreID="02" BsAr_AddPreID="020216" />
    <ROW BsAr_ID="0217" BSAr_Name="昭通" BsAr_PreID="02" BsAr_AddPreID="020217" />
    <ROW BsAr_ID="03" BSAr_Name="北京" BsAr_PreID="" BsAr_AddPreID="03" />
    <ROW BsAr_ID="04" BSAr_Name="河南" BsAr_PreID="" BsAr_AddPreID="04" />
    <ROW BsAr_ID="0401" BSAr_Name="商丘" BsAr_PreID="04" />
    <ROW BsAr_ID="0402" BSAr_Name="南阳" BsAr_PreID="04" BsAr_AddPreID="040402" />
    <ROW BsAr_ID="0403" BSAr_Name="濮阳" BsAr_PreID="04" BsAr_AddPreID="040403" />
    <ROW BsAr_ID="0404" BSAr_Name="郑州" BsAr_PreID="04" BsAr_AddPreID="040404" />
    <ROW BsAr_ID="0405" BSAr_Name="平顶山" BsAr_PreID="04" BsAr_AddPreID="040405" />
    <ROW BsAr_ID="0406" BSAr_Name="鹤壁" BsAr_PreID="04" BsAr_AddPreID="040406" />
    <ROW BsAr_ID="0407" BSAr_Name="洛阳" BsAr_PreID="04" BsAr_AddPreID="040407" />
    <ROW BsAr_ID="0408" BSAr_Name="黄川" BsAr_PreID="04" BsAr_AddPreID="040408" />
    <ROW BsAr_ID="0409" BSAr_Name="新乡" BsAr_PreID="04" BsAr_AddPreID="040409" />
    <ROW BsAr_ID="05" BSAr_Name="上海" BsAr_PreID="" BsAr_AddPreID="05" />
    <ROW BsAr_ID="06" BSAr_Name="四川" BsAr_PreID="" BsAr_AddPreID="06" />
    <ROW BsAr_ID="0601" BSAr_Name="成都" BsAr_PreID="06" BsAr_AddPreID="060601" />
    <ROW BsAr_ID="07" BSAr_Name="浙江" BsAr_PreID="" BsAr_AddPreID="07" />
    <ROW BsAr_ID="0701" BSAr_Name="杭州" BsAr_PreID="07" BsAr_AddPreID="070701" />
    <ROW BsAr_ID="08" BSAr_Name="河北" BsAr_PreID="" BsAr_AddPreID="08" />
    <ROW BsAr_ID="0801" BSAr_Name="张家口" BsAr_PreID="08" BsAr_AddPreID="080801" />
    <ROW BsAr_ID="0802" BSAr_Name="邯郸" BsAr_PreID="08" BsAr_AddPreID="080802" />
    <ROW BsAr_ID="0804" BSAr_Name="石家庄" BsAr_PreID="08" BsAr_AddPreID="080804" />
    <ROW BsAr_ID="09" BSAr_Name="甘肃" BsAr_PreID="" BsAr_AddPreID="09" />
    <ROW BsAr_ID="0901" BSAr_Name="兰州" BsAr_PreID="09" BsAr_AddPreID="090901" />
    <ROW BsAr_ID="10" BSAr_Name="辽宁" BsAr_PreID="" BsAr_AddPreID="10" />
    <ROW BsAr_ID="1001" BSAr_Name="沈阳" BsAr_PreID="10" BsAr_AddPreID="101001" />
    <ROW BsAr_ID="1002" BSAr_Name="辽原" BsAr_PreID="10" BsAr_AddPreID="101002" />
    <ROW BsAr_ID="11" BSAr_Name="重庆" BsAr_PreID="" BsAr_AddPreID="11" />
    <ROW BsAr_ID="12" BSAr_Name="湖北" BsAr_PreID="" BsAr_AddPreID="12" />
    <ROW BsAr_ID="1201" BSAr_Name="武汉" BsAr_PreID="12" BsAr_AddPreID="121201" />
    <ROW BsAr_ID="1202" BSAr_Name="大冶" BsAr_PreID="12" BsAr_AddPreID="121202" />
    <ROW BsAr_ID="1203" BSAr_Name="十堰" BsAr_PreID="12" BsAr_AddPreID="121203" />
    <ROW BsAr_ID="13" BSAr_Name="天津" BsAr_PreID="" BsAr_AddPreID="13" />
    <ROW BsAr_ID="14" BSAr_Name="山西" BsAr_PreID="" BsAr_AddPreID="14" />
    <ROW BsAr_ID="1401" BSAr_Name="太原" BsAr_PreID="14" BsAr_AddPreID="141401" />
    <ROW BsAr_ID="15" BSAr_Name="广西" BsAr_PreID="" BsAr_AddPreID="15" />
    <ROW BsAr_ID="1501" BSAr_Name="南宁" BsAr_PreID="15" BsAr_AddPreID="151501" />
    <ROW BsAr_ID="16" BSAr_Name="贵州" BsAr_PreID="" BsAr_AddPreID="16" />
    <ROW BsAr_ID="1601" BSAr_Name="贵阳" BsAr_PreID="16" BsAr_AddPreID="161601" />
    <ROW BsAr_ID="17" BSAr_Name="福建" BsAr_PreID="" BsAr_AddPreID="17" />
    <ROW BsAr_ID="1701" BSAr_Name="厦门" BsAr_PreID="17" BsAr_AddPreID="171701" />
    <ROW BsAr_ID="1702" BSAr_Name="漳州" BsAr_PreID="17" BsAr_AddPreID="171702" />
    <ROW BsAr_ID="18" BSAr_Name="陕西" BsAr_PreID="" BsAr_AddPreID="18" />
    <ROW BsAr_ID="19" BSAr_Name="天津" BsAr_PreID="" BsAr_AddPreID="19" />
    <ROW BsAr_ID="20" BSAr_Name="吉林" BsAr_PreID="" BsAr_AddPreID="20" />
    <ROW BsAr_ID="2001" BSAr_Name="哈尔滨" BsAr_PreID="20" BsAr_AddPreID="202001" />
    <ROW BsAr_ID="21" BSAr_Name="黑龙江" BsAr_PreID="" BsAr_AddPreID="21" />
    <ROW BsAr_ID="2101" BSAr_Name="乌鲁木齐" BsAr_PreID="21" BsAr_AddPreID="212101" />
    <ROW BsAr_ID="22" BSAr_Name="云南" BsAr_AddPreID="22" />
    <ROW BsAr_ID="2201" BSAr_Name="昆明" BsAr_PreID="22" BsAr_AddPreID="222201" />
    </ROWDATA>
    </DATAPACKET>
    <USERDEF TABLENAME>Tab_Bas_Area</USERDEF TABLENAME><FIELDDISPLAYNAME><?xml version="1.0" standalone="yes"?>
    <DATAPACKET Version="2.0">
    <METADATA>
    <FIELDS>
    <FIELD attrname="编号" fieldtype="string" width="20"/>
    <FIELD attrname="名称" fieldtype="string" width="50"/>
    <FIELD attrname="上级编号" fieldtype="string" width="20"/>
    <FIELD attrname="累加编号" fieldtype="string" width="50"/>
    </FIELDS>
    <PARAMS/>
    </METADATA>
    <ROWDATA>
    </ROWDATA>
    </DATAPACKET>
      

  10.   

    那也没问题啊,你把客户端的一次大数据量请求分批处理,都写到同一个文件,等处理完后,你再把这个读成一个String,下刷给客户端;另外你也可以要求让客户端每次只能申请到你服务器可处理的最大记录数,让客户端可以分批申请,我做过几个大数据量项目,就是这么做的啊,并且运行的很好。
      

  11.   

    当然,你如果觉得一个文件全部生成一个大String,太大了,你也可以分批传送,你可以在你给客户端的包中设置开始和结束标志,客户端在接受到结束标志后,才算一个接受到一个完整的应答。