//******************************************************************************
//
// File:    UC.java
// Package: edu.rit.pj.test
// Unit:    Class edu.rit.pj.test.UC
//
// This Java source file is copyright (C) 2007 by Alan Kaminsky. All rights
// reserved. For further information, contact the author, Alan Kaminsky, at
// ark@cs.rit.edu.
//
// This Java source file is part of the Parallel Java Library ("PJ"). PJ is free
// software; you can redistribute it and/or modify it under the terms of the GNU
// General Public License as published by the Free Software Foundation; either
// version 3 of the License, or (at your option) any later version.
//
// PJ 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 General Public License for more details.
//
// A copy of the GNU General Public License is provided in the file gpl.txt. You
// may also obtain a copy of the GNU General Public License on the World Wide
// Web at http://www.gnu.org/licenses/gpl.html.
//
//******************************************************************************

package edu.rit.pj.test;

import edu.rit.pj.ParallelIteration;
import edu.rit.pj.ParallelRegion;
import edu.rit.pj.ParallelTeam;

import java.io.IOException;
import java.io.InputStream;

import java.net.MalformedURLException;
import java.net.URL;

import java.util.concurrent.atomic.AtomicLong;

/**
 * Class UC is a main program that counts lines, words, and bytes in the URLs
 * given on the command line. It is a multi-threaded program using Parallel
 * Java.
 * 

* Usage: java edu.rit.pj.test.UC url . . . * * @author Alan Kaminsky * @version 04-Jun-2007 */ public class UC { // Prevent construction. private UC() { } // Global variables. static String[] urls; static AtomicLong totalLines = new AtomicLong (0L); static AtomicLong totalWords = new AtomicLong (0L); static AtomicLong totalBytes = new AtomicLong (0L); // Main program. /** * Main program. */ public static void main (String[] args) throws Throwable { long stopwatch = -System.currentTimeMillis(); urls = args; new ParallelTeam (urls.length) .execute (new ParallelRegion() { public void run() throws Exception { // Process all URLs. execute (urls, new ParallelIteration() { // Process one URL. public void run (String url) { try { // Open a data stream from the URL. InputStream stream = new URL (url) .openStream(); // Initialize counters. long lines = 0L; long words = 0L; long bytes = 0L; boolean inaword = false; // Read data and update counters. int b; while ((b = stream.read()) != -1) { ++ bytes; if (b == '\n') ++ lines; if (0x21 <= b && b <= 0x7e) // Non-whitespace { if (! inaword) ++ words; inaword = true; } else // Whitespace { inaword = false; } } // Close data stream. stream.close(); // Accumulate totals. totalLines.addAndGet (lines); totalWords.addAndGet (words); totalBytes.addAndGet (bytes); // Print results. System.out.println (lines + "\t" + words + "\t" + bytes + "\t" + url); } catch (MalformedURLException exc) { System.err.println ("\"" + url + "\": Malformed URL"); } catch (IOException exc) { System.err.println (url + ": I/O error"); } } }); } }); // Print final totals. System.out.println (totalLines + "\t" + totalWords + "\t" + totalBytes + "\tTotal"); stopwatch += System.currentTimeMillis(); System.out.println (stopwatch + " msec"); } }

Ads help maintain this website.