zoukankan      html  css  js  c++  java
  • 记一次NegativeArraySizeException

    问题描述:服务器接收后台返回的报文时,提示java.lang.NegativeArraySizeException

    分析:这种异常返回的原因,一般情况下没有报文提示为返回空报文,初步分析是响应报文流长度出了问题

    百度一下类似的情况:https://stackoverflow.com/questions/11207897/negative-array-size-exception

    节选部分内容:

    try{
         connection = (HttpConnection)Connector.open("http://someurl.xml",Connector.READ_WRITE);
         URLEncodedPostData postData = new URLEncodedPostData(URLEncodedPostData.DEFAULT_CHARSET, false);
         postData.append("username", "loginapi");
         postData.append("password", "myapilogin");
         postData.append("term", word);
    
         connection.setRequestMethod(HttpConnection.POST);
         connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
         connection.setRequestProperty("User-Agent","Profile/MIDP-2.0 Configuration/CLDC-1.0");
         requestOut = connection.openOutputStream();
         requestOut.write(postData.getBytes());
         String contentType = connection.getHeaderField("Content-type"); 
         detailIn = connection.openInputStream();         
         int length = (int) connection.getLength();
         ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
         if(length > 0){//这里长度没有判定的情况下,byte array长度若为-1会产生错误
             byte info[] = new byte[length];
             int bytesRead = detailIn.read(info);
             while(bytesRead > 0) { 
                 baos.write(info, 0, bytesRead); 
                 bytesRead = detailIn.read(info); 
                 }
             baos.close();
             connection.close();
             requestSuceeded(baos.toByteArray(), contentType);
    
             detailIn.read(info);
         }
         else
         {
              System.out.println("Negative array size");
         }
               requestOut.close();
               detailIn.close();
               connection.close();
        }
    

      结论:HTTP服务器在返回响应报文的时候,没有进行content.length长度判断,按照常规流程响应了错误长度的报文,导致了接收方报文长度异常

    分享即成长
  • 相关阅读:
    codeforces567E. President and Roads
    codeforces 573C Bear and Drawing
    bzoj4160: [Neerc2009]Exclusive Access 2
    bzoj1251: 序列终结者
    bzoj2534: Uva10829L-gap字符串
    Excel中导入到oracle使用merge into 差异性更新数据库
    文件解压缩公用类
    XML常用操作
    密码加密解密
    GridView中数据行的操作
  • 原文地址:https://www.cnblogs.com/bobkingblog/p/11023620.html
Copyright © 2011-2022 走看看