2016-05-17 1 views
0

Получение ошибки на линии возврата, а также не уверены, правильна ли проверка размера.Как проверить java для переменной размер?

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 не может инициализировать в этом линия:

return bufOut; 
+0

вы должны инициализировать локальную переменную перед использованием их !! – Prashant

ответ

0

Почему бы вам не попробовать возвращения значения, возвращаемого Arrays.copyOf(), а не хранить его в переменной, а затем вернуть его.

0

Вы получаете, возможно, не инициализированную ошибку, потому что если szRead равно нулю или меньше, bufOut не инициализируется. Согласно the specification, если szRead отрицательный (например, если файл находится в EOF при вызове read()), то будет сгенерировано исключение, так что вы могли бы сделать что-либо:

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, или бросить другой AndroidRuntimeException для szRead < 0, или просто сделать:

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