Java NegativeArraySizeException异常解决方案

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

问题描述:服务器接收后台返回的报文时,提示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

标签:Java,NegativeArraySizeException
0
投稿

猜你喜欢

  • 如何用Java Stream写出既高雅又装*的代码

    2022-04-13 23:23:58
  • 详解Java分布式系统中一致性哈希算法

    2022-10-11 18:01:05
  • SpringBoot全局异常与数据校验的方法

    2023-12-11 10:46:06
  • Spring boot如何快速的配置多个Redis数据源

    2023-05-12 18:27:32
  • Struts2学习笔记(8)-Result常用类型

    2023-06-05 11:10:19
  • Java webservice的POST和GET请求调用方式

    2023-01-10 05:35:43
  • android通过gps获取定位的位置数据和gps经纬度    

    2023-04-26 04:51:59
  • java算法实现预测双色球中奖号码

    2022-06-19 17:01:22
  • 解决maven build 无反应,直接terminated的问题

    2021-11-28 18:56:13
  • 详解Java线程堆栈

    2021-06-29 03:37:38
  • c#可以创建任意控件的拖动方法

    2021-11-30 01:51:08
  • eclipse如何搭建Springboot项目详解

    2023-11-29 04:52:36
  • Java环境配置原理全面解析

    2023-11-23 07:56:48
  • Java8中CompletableFuture的用法全解

    2023-09-08 15:08:55
  • java实现简单的小超市程序

    2023-05-17 00:04:29
  • Java使用BigDecimal进行高精度计算的示例代码

    2023-03-25 10:35:43
  • Spring Cloud中Sentinel的两种限流模式介绍

    2021-11-22 00:38:10
  • Android集成微信支付功能

    2023-07-14 10:38:11
  • Java中ArrayList和LinkedList的遍历与性能分析

    2023-10-31 11:04:17
  • Java实现的校验银行卡功能示例

    2022-01-28 19:33:53
  • asp之家 软件编程 m.aspxhome.com