【问题标题】:ByteArrayOutputStream .toByteArray(); ExceptionByteArrayOutputStream .toByteArray();例外
【发布时间】:2016-01-12 16:43:41
【问题描述】:

当我尝试制作方法时 .toByteArray();总是陷入异常,但日志没有显示,可能是什么问题:

protected byte[] GetResponseBytes(HttpURLConnection conn)
{
    byte[] data2 = null;
    try
    {
        int nRead;
        byte[] data = new byte[16384];
        InputStream is = conn.getInputStream();
        ByteArrayOutputStream buff = new ByteArrayOutputStream();

        while ((nRead = is.read(data, 0, data.length)) != -1)
            buff.write(data, 0, nRead);

        buff.flush();
        buff.close();
        is.close();
        data2 = buff.toByteArray();
        return data2;

    }
    catch (Exception ex)
    {
        Log.d(" ERROR ", "[ data loader - post response bytes ] "+ex.getMessage());
        return data2;
    }
}

我这样调用方法:

byte[] data = GetResponseBytes(conn);
            element = parser.parseFrom(data);

解析器是一个protocolBuffer并产生异常

【问题讨论】:

    标签: android protocol-buffers httpurlconnection bytearrayoutputstream


    【解决方案1】:

    您已在以下行关闭了缓冲区“buff”: buff.close(); 那么你正在访问它。访问后关闭它 - 不是之前:-)

    【讨论】:

    • 您遇到的异常是什么?尝试在 Log 调用所在的行放置一个断点,而不是依赖于日志本身。
    • com.google.protobuf.InvalidProtocolBufferException:协议消息标签的线路类型无效。
    • 好的,看看接受的类似问题的答案here。我认为对于您的特定问题,您需要使用链接中描述的 CodedOutputStream 读取/写入字节数组。
    【解决方案2】:

    data2 = buff.toByteArray(); buff.flush(); buff.close();`

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-05
      • 2011-12-29
      • 1970-01-01
      • 2011-06-02
      • 2011-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多