Mega Code Archive

 
Categories / Java / File Input Output
 

DataInputStream out of FileInputStream, DataOutputStream out of FileOutputStream

/*  * 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;       }   }