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长度判断,按照常规流程响应了错误长度的报文,导致了接收方报文长度异常

    分享即成长
  • 相关阅读:
    jquery判断<inpur type="checkbox" checked>是否被选择
    hibernate多对多的更新问题
    关于getHibernateTemplate().get()方法
    springmvc的@ResponseBody报错
    @RequestBody ajax 415 400
    js判断浏览器的类型,动态调整div布局
    平衡树treap 0基础详解
    P1582 倒水 题解
    vscode入门记
    P5025 [SNOI2017]炸弹 题解
  • 原文地址:https://www.cnblogs.com/bobkingblog/p/11023620.html
Copyright © 2011-2022 走看看