Network Protocol Java

/**
 * The utillib library.
 * More information is available at http://www.jinchess.com/.
 * Copyright (C) 2003 Alexander Maryanovsky.
 * All rights reserved.
 *
 * The utillib library is free software; you can redistribute
 * it and/or modify it under the terms of the GNU Lesser General Public License
 * as published by the Free Software Foundation; either version 2 of the
 * License, or (at your option) any later version.
 *
 * The utillib library is distributed in the hope that it will
 * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser
 * General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with utillib library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
import java.net.URL;
import java.net.URLConnection;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.ZipFile;
import java.util.zip.ZipEntry;
/**
 * A URLConnection which loads its content from a specified zip
 * entry within a local file.
 */
public class ZipURLConnection extends URLConnection{
  /**
   * The zip file.
   */
  private final File file;
  /**
   * The name of the zip entry within the zip file.
   */
  private final String zipEntryName;
  /**
   * The ZipFile object for the zip file. Created when
   * connect() is called.
   */
  private ZipFile zipFile = null;
  /**
   * The ZipEntry object for the entry in the zip file. Created
   * when connect() is called.
   */
  private ZipEntry zipEntry = null;
  /**
   * Creates a new ZipURLConnection for the specified zip entry
   * within the specified File.
   */
  public ZipURLConnection(URL url, File file, String zipEntryName){
    super(url);
    this.file = file;
    this.zipEntryName = zipEntryName;
  }
  /**
   * Attempts to open the zip entry.
   */
  public void connect() throws IOException{
    this.zipFile = new ZipFile(file);
    this.zipEntry = zipFile.getEntry(zipEntryName);
    if (zipEntry == null)
      throw new IOException("Entry " + zipEntryName + " not found in file " + file);
    this.connected = true;
  }
  /**
   * Returns the InputStream that reads from this connection.
   */
  public InputStream getInputStream() throws IOException{
    if (!connected)
      connect();
    return zipFile.getInputStream(zipEntry);
  }
  /**
   * Returns the length of the uncompressed zip entry.
   */
  public int getContentLength(){
    if (!connected)
      return -1;
    return (int)zipEntry.getSize();
  }
}