我如何在java中检查可变大小?

时间:2016-05-17 06:52:07

标签: java android

在返回行上获取错误,也不确定检查大小是否正确。

private byte[] Get(String urlIn)
    {
        URL url = null;
        String urlStr = urlIn;
        if (urlIn!=null)
            urlStr=urlIn;

        try
        {
            url = new URL(urlStr);
        } catch (MalformedURLException e)
        {
            e.printStackTrace();
            return null;
        }
        HttpURLConnection urlConnection = null;
        try
        {
            urlConnection = (HttpURLConnection) url.openConnection();

            InputStream in = new BufferedInputStream(urlConnection.getInputStream());

            byte[] buf=new byte[10*1024];
            int szRead = in.read(buf);
            byte[] bufOut;

            if (szRead==10*1024)
            {
                throw new AndroidRuntimeException("the returned data is bigger than 10*1024.. we don't handle it..");
            }
            else
            {
                if (szRead > 0) {
                    bufOut = Arrays.copyOf(buf, szRead);
                }
            }
            return bufOut;
        }
        catch (IOException e)
        {
            e.printStackTrace();
            return null;
        }
        finally
        {
            if (urlConnection!=null)
                urlConnection.disconnect();
        }
    }

部分:

if (szRead > 0) {
                        bufOut = Arrays.copyOf(buf, szRead);
                    }

不确定这是否是在java中检查它的正确方法,而且在执行此操作时,我在变量bufOut上出错可能不是此行中的init:

return bufOut;

2 个答案:

答案 0 :(得分:0)

为什么不尝试返回if返回的值,而不是将其存储在变量中,然后将其返回。

答案 1 :(得分:0)

您可能未获得初始化错误,因为如果szRead为零或更少,则bufOut未初始化。根据{{​​3}},如果szRead为负数(例如,如果文件在调用read()时处于EOF状态),则会抛出异常,因此您可以执行以下任一操作:

if (szRead==10*1024)
{
    throw new AndroidRuntimeException("the returned data is bigger than 10*1024.. we don't handle it..");
}
else
{
    bufOut = Arrays.copyOf(buf, szRead);
}
return bufOut;

抓住NegativeArraySizeException,或者为szRead<抛出另一个AndroidRuntimeException 0,或只是做:

bufOut = Arrays.copyOf(buf, szRead < 0 ? 0 : szRead);