/* 
 * Copyright (c) 1995 - 2008 Sun Microsystems, Inc.  All rights reserved. 
 * 
 * Redistribution and use in source and binary forms, with or without 
 * modification, are permitted provided that the following conditions 
 * are met: 
 * 
 *   - Redistributions of source code must retain the above copyright 
 *     notice, this list of conditions and the following disclaimer. 
 * 
 *   - Redistributions in binary form must reproduce the above copyright 
 *     notice, this list of conditions and the following disclaimer in the 
 *     documentation and/or other materials provided with the distribution. 
 * 
 *   - Neither the name of Sun Microsystems nor the names of its 
 *     contributors may be used to endorse or promote products derived 
 *     from this software without specific prior written permission. 
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
 */  
 
import java.io.DataInput; 
import java.io.DataInputStream; 
import java.io.DataOutput; 
import java.io.DataOutputStream; 
import java.io.EOFException; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
 
public class CheckedDIDemo { 
    public static void main(String[] args) throws IOException { 
 
        Adler32 inChecker = new Adler32(); 
        Adler32 outChecker = new Adler32(); 
        CheckedDataInput in = null; 
        CheckedDataOutput out = null; 
 
        try { 
            in = new CheckedDataInput(new DataInputStream(new FileInputStream("xanadu.txt")),inChecker); 
            out = new CheckedDataOutput(new DataOutputStream(new FileOutputStream("outagain.txt")),outChecker); 
        } catch (FileNotFoundException e) { 
            System.err.println("CheckedIOTest: " + e); 
            System.exit(-1); 
        } catch (IOException e) { 
            System.err.println("CheckedIOTest: " + e); 
            System.exit(-1); 
        } 
 
        boolean EOF = false; 
 
        while (!EOF) { 
            try { 
                int c = in.readByte(); 
                out.write(c); 
            } catch (EOFException e) { 
                EOF = true; 
            } 
        } 
 
        System.out.println("Input stream check sum: " + 
               in.getChecksum().getValue()); 
        System.out.println("Output stream check sum: " + 
               out.getChecksum().getValue()); 
    } 
} 
/* 
 * Copyright (c) 1995 - 2008 Sun Microsystems, Inc.  All rights reserved. 
 * 
 * Redistribution and use in source and binary forms, with or without 
 * modification, are permitted provided that the following conditions 
 * are met: 
 * 
 *   - Redistributions of source code must retain the above copyright 
 *     notice, this list of conditions and the following disclaimer. 
 * 
 *   - Redistributions in binary form must reproduce the above copyright 
 *     notice, this list of conditions and the following disclaimer in the 
 *     documentation and/or other materials provided with the distribution. 
 * 
 *   - Neither the name of Sun Microsystems nor the names of its 
 *     contributors may be used to endorse or promote products derived 
 *     from this software without specific prior written permission. 
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
 */  
 
 class Adler32 implements Checksum { 
    private int value = 1; 
 
    /* 
     * BASE is the largest prime number smaller than 65536 
     * NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 
     */ 
    private static final int BASE = 65521; 
    private static final int NMAX = 5552; 
 
    /** 
     * Update current Adler-32 checksum given the specified byte. 
     */ 
    public void update(int b) { 
        int s1 = value & 0xffff; 
        int s2 = (value >> 16) & 0xffff; 
        s1 += b & 0xff; 
        s2 += s1; 
        value = ((s2 % BASE) << 16) | (s1 % BASE); 
    } 
 
    /** 
     * Update current Adler-32 checksum given the specified byte array. 
     */ 
    public void update(byte[] b, int off, int len) { 
        int s1 = value & 0xffff; 
        int s2 = (value >> 16) & 0xffff; 
 
        while (len > 0) { 
            int k = len < NMAX ? len : NMAX; 
            len -= k; 
            while (k-- > 0) { 
                s1 += b[off++] & 0xff; 
                s2 += s1; 
            } 
            s1 %= BASE; 
            s2 %= BASE; 
        } 
        value = (s2 << 16) | s1; 
    } 
 
    /** 
     * Reset Adler-32 checksum to initial value. 
     */ 
    public void reset() { 
        value = 1; 
    } 
 
    /** 
     * Returns current checksum value. 
     */ 
    public long getValue() { 
        return (long)value & 0xffffffff; 
    } 
} 
 /* 
  * Copyright (c) 1995 - 2008 Sun Microsystems, Inc.  All rights reserved. 
  * 
  * Redistribution and use in source and binary forms, with or without 
  * modification, are permitted provided that the following conditions 
  * are met: 
  * 
  *   - Redistributions of source code must retain the above copyright 
  *     notice, this list of conditions and the following disclaimer. 
  * 
  *   - Redistributions in binary form must reproduce the above copyright 
  *     notice, this list of conditions and the following disclaimer in the 
  *     documentation and/or other materials provided with the distribution. 
  * 
  *   - Neither the name of Sun Microsystems nor the names of its 
  *     contributors may be used to endorse or promote products derived 
  *     from this software without specific prior written permission. 
  * 
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 
  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */  
 
 interface Checksum { 
     /** 
      * Updates the current checksum with the specified byte. 
      */ 
     public void update(int b); 
 
     /** 
      * Updates the current checksum with the specified array of bytes. 
      */ 
     public void update(byte[] b, int off, int len); 
 
     /** 
      * Returns the current checksum value. 
      */ 
     public long getValue(); 
 
     /** 
      * Resets the checksum to its initial value. 
      */ 
     public void reset(); 
 } 
 /* 
  * Copyright (c) 1995 - 2008 Sun Microsystems, Inc.  All rights reserved. 
  * 
  * Redistribution and use in source and binary forms, with or without 
  * modification, are permitted provided that the following conditions 
  * are met: 
  * 
  *   - Redistributions of source code must retain the above copyright 
  *     notice, this list of conditions and the following disclaimer. 
  * 
  *   - Redistributions in binary form must reproduce the above copyright 
  *     notice, this list of conditions and the following disclaimer in the 
  *     documentation and/or other materials provided with the distribution. 
  * 
  *   - Neither the name of Sun Microsystems nor the names of its 
  *     contributors may be used to endorse or promote products derived 
  *     from this software without specific prior written permission. 
  * 
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 
  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */  
 
 /* 
  * This class is an example only. A "final" version of 
  * this class should implement the DataOutput interface 
  * and provide implementations for the methods declared in 
  * DataOutput. 
  */ 
 
  class CheckedDataOutput { 
     private Checksum cksum; 
     private DataOutput out; 
 
     public CheckedDataOutput(DataOutput out, Checksum cksum) { 
         this.cksum = cksum; 
         this.out = out; 
     } 
 
     public void write(int b) throws IOException { 
         out.write(b); 
         cksum.update(b); 
     } 
 
     public void write(byte[] b) throws IOException { 
         out.write(b, 0, b.length); 
         cksum.update(b, 0, b.length); 
     } 
 
     public void write(byte[] b, int off, int len) throws IOException { 
         out.write(b, off, len); 
         cksum.update(b, off, len); 
     } 
 
     public Checksum getChecksum() { 
         return cksum; 
     } 
 } 
 
 
  /* 
   * Copyright (c) 1995 - 2008 Sun Microsystems, Inc.  All rights reserved. 
   * 
   * Redistribution and use in source and binary forms, with or without 
   * modification, are permitted provided that the following conditions 
   * are met: 
   * 
   *   - Redistributions of source code must retain the above copyright 
   *     notice, this list of conditions and the following disclaimer. 
   * 
   *   - Redistributions in binary form must reproduce the above copyright 
   *     notice, this list of conditions and the following disclaimer in the 
   *     documentation and/or other materials provided with the distribution. 
   * 
   *   - Neither the name of Sun Microsystems nor the names of its 
   *     contributors may be used to endorse or promote products derived 
   *     from this software without specific prior written permission. 
   * 
   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 
   * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
   * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
   * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
   * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
   * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
   * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
   * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
   * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
   * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
   * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
   */  
 
  /*  
   * This class is an example only. A "final" version of  
   * this class should implement the DataInput interface 
   * and provide implementations for the methods declared in 
   * DataInput. 
   */  
  class CheckedDataInput { 
      private Checksum cksum; 
      private DataInput in; 
 
      public CheckedDataInput(DataInput in, Checksum cksum) { 
          this.cksum = cksum; 
          this.in = in; 
      } 
 
      public byte readByte() throws IOException { 
          byte b = in.readByte(); 
          cksum.update(b); 
          return b; 
      } 
 
      public void readFully(byte[] b) throws IOException { 
          in.readFully(b, 0, b.length); 
          cksum.update(b, 0, b.length); 
      } 
 
      public void readFully(byte[] b, int off, int len) throws IOException { 
          in.readFully(b, off, len); 
          cksum.update(b, off, len); 
      } 
 
      public Checksum getChecksum() { 
          return cksum; 
      } 
  } 
 
    
     
  
  |