2016-05-17 3 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(); 
     } 
    } 

部分:これはJavaでも、私は、変数BUFOUT上のエラーを取得しています。この本ではinitされない可能性がありますをやったときに、それをチェックするための正しい方法がある場合

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

わかりませんライン:

return bufOut; 
+0

、あなたはそれらを使用する前に、ローカル変数を初期化する必要があります! – Prashant

答えて

0

は、なぜあなたは変数に格納し、それを返すのではなくArrays.copyOf()によって返された値を返すしようとしないでください。

0

szReadがゼロ以下の場合は、bufOutが初期化されないため、初期化されていないエラーが発生する可能性があります。

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は(read()を呼び出すときに、たとえば、ファイルがEOFである場合)、負の場合the specificationによると、それはあなたがいずれかを行うことができるように、例外がスローされますszRead 、または単にん:

bufOut = Arrays.copyOf(buf, szRead < 0 ? 0 : szRead); 
関連する問題