软件编程
位置:首页>> 软件编程>> java编程>> Java NegativeArraySizeException异常解决方案

Java NegativeArraySizeException异常解决方案

作者:蜗牛coder  发布时间:2023-10-31 07:16:51 

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

来源:https://www.cnblogs.com/bobkingblog/p/11023620.html

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com