My understanding is that closing streams in Java is recommended, but not even close to a "requirement". Likewise, it's a good idea, but not near a requirement, to reset a *CharsetDecoder* after you are done using it.

Throwing the exception makes the method look clean and very readable. Catching the exception might be "recommended", but it adds a little clutter to the method. So, on a professional programming team, would you really "catch and close/reset"? Is it that important? Here, I preferred to just throw it: 

```
<!-- language: Java -->
    public static String[] grabData(URL url, CharsetDecoder dcdr) throws Exception {  

        List<String> dump = new ArrayList<String>();
        dcdr.reset();

        HttpURLConnection conn = (HttpURLConnection) url.openConnection();

        BufferedReader bufrdr = new BufferedReader(new InputStreamReader(conn.getInputStream(), dcdr));
        while (dump.add(bufrdr.readLine())) { }

        bufrdr.close();
        dcdr.reset();

        return dump.toArray(new String[0]);
    }

```