Leyendo los contenidos del sitio web en cadena

Actualmente estoy trabajando en una clase que se puede usar para leer el contenido del sitio web especificado por la URL. Estoy empezando mis aventuras conjava.io yjava.net así que necesito consultar mi diseño.

Uso

TextURL url = new TextURL(urlString);
String contents = url.read();

Mi código

package pl.maciejziarko.util;

import java.io.*;
import java.net.*;

public final class TextURL
{
    private static final int BUFFER_SIZE = 1024 * 10;
    private static final int ZERO = 0;
    private final byte[] dataBuffer = new byte[BUFFER_SIZE];
    private final URL urlObject;

    public TextURL(String urlString) throws MalformedURLException
    {
        this.urlObject = new URL(urlString);
    }

    public String read() 
    {
        final StringBuilder sb = new StringBuilder();

        try
        {
            final BufferedInputStream in =
                    new BufferedInputStream(urlObject.openStream());

            int bytesRead = ZERO;

            while ((bytesRead = in.read(dataBuffer, ZERO, BUFFER_SIZE)) >= ZERO)
            {
                sb.append(new String(dataBuffer, ZERO, bytesRead));
            }
        }
        catch (UnknownHostException e)
        {
            return null;
        }
        catch (IOException e)
        {
            return null;
        }

        return sb.toString();
    }

    //Usage:
    public static void main(String[] args)
    {
        try
        {
            TextURL url = new TextURL("http://www.flickr.com/explore/interesting/7days/");
            String contents = url.read();

            if (contents != null)
                System.out.println(contents);
            else
                System.out.println("ERROR!");
        }
        catch (MalformedURLException e)
        {
            System.out.println("Check you the url!");
        }
    }
}

Mi pregunta es: ¿es una buena manera de lograr lo que quiero? ¿Hay alguna solución mejor?

@ particularmente no me gustósb.append(new String(dataBuffer, ZERO, bytesRead)); pero no pude expresarlo de otra manera. ¿Es bueno crear una nueva cadena cada iteración? Supongo que no.

¿Algún otro punto débil?

¡Gracias por adelantado

Respuestas a la pregunta(6)

Su respuesta a la pregunta