Java Tutorial/File/DataInputStream

Материал из Java эксперт
Перейти к: навигация, поиск

Check the class version

   <source lang="java">

import java.io.DataInputStream; import java.io.FileInputStream; import java.io.IOException; public class Main {

 public static void main(String[] args) throws IOException {
   DataInputStream in = new DataInputStream(new FileInputStream("Main.class"));
   int start = in.readInt();
   if (start != 0xcafebabe) {
     System.out.println("not valid");
   }
   in.close();
   System.out.println(in.readUnsignedShort()+"/"+in.readUnsignedShort());
   
 }

}</source>





Create a compressed data file by using a DeflaterOutputStream and then read that data through an InflaterInputStream.

   <source lang="java">

import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.DeflaterOutputStream; import java.util.zip.InflaterInputStream; public class Main {

 public static void main(String[] argv) throws Exception {
   double data[] = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6 };
   DataOutputStream fout = new DataOutputStream(new DeflaterOutputStream(new FileOutputStream(
       "data.dat")));
   fout.writeInt(data.length);
   for (double d : data)
     fout.writeDouble(d);
   DataInputStream  fin = new DataInputStream(new InflaterInputStream(new FileInputStream(
       "data.dat")));
   int num = fin.readInt();
   double avg = 0.0;
   double d;
   for (int i = 0; i < num; i++) {
     d = fin.readDouble();
     avg += d;
     System.out.print(d + " ");
   }
   fin.close();
   fout.close();
 }

}</source>





Create DataInputStream from BufferedInputStream and FileInputStream

   <source lang="java">

import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.FileInputStream; import java.io.IOException; public class MainClass {

 public static void main(String[] args) throws IOException {
   DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(
       "temp.tmp")));
   for (int i = 0; i < 10; i++)
     dis.readInt();
   dis.close();
 }

}</source>





Create DataInputStream from ByteArrayInputStream

   <source lang="java">

import java.io.ByteArrayInputStream; import java.io.DataInputStream; import java.io.EOFException; import java.io.IOException; public class MainClass {

 public static void main(String[] args) throws IOException {
   try {
     DataInputStream in3 = new DataInputStream(
       new ByteArrayInputStream("a dbcde".getBytes()));
     while(true)
       System.out.print((char)in3.readByte());
   } catch(EOFException e) {
     System.err.println("End of stream");
   }
 }

}//</source>



a dbcdeEnd of stream


Create DataInputStream from FileInputStream

   <source lang="java">

import java.io.DataInputStream; import java.io.EOFException; import java.io.FileInputStream; import java.io.IOException; public class MainClass {

 public static void main(String[] args) throws Exception {
   DataInputStream din = null;
   try {
     FileInputStream fin = new FileInputStream("myfile.dat");
     din = new DataInputStream(fin);
     while (true) {
       int theNumber = din.readInt();
       System.out.println(theNumber);
     }
   } catch (EOFException ex) {
     din.close();
   } catch (IOException ex) {
     System.err.println(ex);
   }
 }

}</source>





Read boolean from file using DataInputStream

   <source lang="java">

import java.io.DataInputStream; import java.io.FileInputStream; public class Main {

 public static void main(String[] args) throws Exception {
   FileInputStream fin = new FileInputStream("C:/n.txt");
   DataInputStream din = new DataInputStream(fin);
   boolean b = din.readBoolean();
   System.out.println("boolean : " + b);
   din.close();
 }

}</source>





Read byte array from file using DataInputStream

   <source lang="java">

import java.io.DataInputStream; import java.io.FileInputStream; public class Main {

 public static void main(String[] args) throws Exception {
   FileInputStream fin = new FileInputStream("C:/Array.txt");
   DataInputStream din = new DataInputStream(fin);
   byte b[] = new byte[10];
   din.read(b);
   din.close();
 }

}</source>





Read byte from file using DataInputStream

   <source lang="java">

import java.io.DataInputStream; import java.io.FileInputStream; public class Main {

 public static void main(String[] args) throws Exception {
   FileInputStream fin = new FileInputStream("C:/Byte.txt");
   DataInputStream din = new DataInputStream(fin);
   byte b = din.readByte();
   System.out.println("byte : " + b);
   din.close();
 }

}</source>





Read char from file using DataInputStream

   <source lang="java">

import java.io.DataInputStream; import java.io.FileInputStream; public class Main {

 public static void main(String[] args) throws Exception{
   FileInputStream fin = new FileInputStream("C:/Char.txt");
   DataInputStream din = new DataInputStream(fin);
   char ch = din.readChar();
   System.out.println("Char : " + ch);
   din.close();
 }

}</source>





Read double and UTF from DataInputStream with BufferedInputStream backended

   <source lang="java">

import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class MainClass {

 public static void main(String[] args) throws IOException {
   DataOutputStream out2 = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(
       "Data.txt")));
   out2.writeDouble(3.14159);
   out2.writeUTF("Square root of 2");
   out2.close();
   DataInputStream in5 = new DataInputStream(new BufferedInputStream(new FileInputStream(
       "Data.txt")));
   System.out.println(in5.readDouble());
   System.out.println(in5.readUTF());
 }

}</source>





Read double from DataInputStream

   <source lang="java">

import java.io.DataInputStream; import java.io.EOFException; import java.io.FileInputStream; import java.io.IOException; public class MainClass {

 public static void main(String[] args) {
   try {
     FileInputStream fin = new FileInputStream("myFile.dat");
     DataInputStream din = new DataInputStream(fin);
     while (true) {
       double theNumber = din.readDouble();
       System.out.println(theNumber);
     }
   } catch (EOFException e) {
   } catch (IOException e) {
     // abnormal termination
     System.err.println(e);
   }
 }

}</source>





Read float from file using DataInputStream

   <source lang="java">

import java.io.DataInputStream; import java.io.FileInputStream; public class Main {

 public static void main(String[] args) throws Exception {
   FileInputStream fin = new FileInputStream("C:/Float.txt");
   DataInputStream din = new DataInputStream(fin);
   float f = din.readFloat();
   System.out.println("float : " + f);
   din.close();
 }

}</source>





Read int from DataInputStream

   <source lang="java">

import java.io.DataInputStream; import java.io.EOFException; import java.io.FileInputStream; import java.io.IOException; public class MainClass {

 public static void main(String[] args) throws Exception {
   DataInputStream din = null;
   try {
     FileInputStream fin = new FileInputStream("myfile.dat");
     din = new DataInputStream(fin);
     while (true) {
       int theNumber = din.readInt();
       System.out.println(theNumber);
     }
   } catch (EOFException ex) {
     din.close();
   } catch (IOException ex) {
     System.err.println(ex);
   }
 }

}</source>





Read long from file using DataInputStream

   <source lang="java">

import java.io.DataInputStream; import java.io.FileInputStream; public class Main {

 public static void main(String[] args) throws Exception {
   FileInputStream fin = new FileInputStream("C:/Long.txt");
   DataInputStream din = new DataInputStream(fin);
   long l = din.readLong();
   System.out.println("long : " + l);
   din.close();
 }

}</source>





Read short from file using DataInputStream

   <source lang="java">

import java.io.DataInputStream; import java.io.FileInputStream; public class Main {

 public static void main(String[] args) throws Exception {
   FileInputStream fin = new FileInputStream("C:/Short.txt");
   DataInputStream din = new DataInputStream(fin);
   short s = din.readShort();
   System.out.println("short : " + s);
   din.close();
 }

}</source>





Read unsigned byte from file using DataInputStream

   <source lang="java">

import java.io.DataInputStream; import java.io.FileInputStream; public class Main {

 public static void main(String[] args) throws Exception {
   FileInputStream fin = new FileInputStream("C:/UnsignedByte.txt");
   DataInputStream din = new DataInputStream(fin);
   int i = din.readUnsignedByte();
   System.out.println("Unsinged byte value : " + i);
   din.close();
 }

}</source>





Testing for end of file while reading a byte at a time.

   <source lang="java">

import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.FileInputStream; import java.io.IOException; public class MainClass {

 public static void main(String[] args) throws IOException {
   DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream(
       "test.java")));
   while (in.available() != 0)
     System.out.print((char) in.readByte());
 }

}</source>





This class is an part implementation of DataInput. It wraps a Reader object.

   <source lang="java">

/* Copyright (c) 2001-2009, The HSQL Development Group

* 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 the HSQL Development Group 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 HSQL DEVELOPMENT GROUP, HSQLDB.ORG,
* 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.EOFException; import java.io.IOException; import java.io.Reader; /**

* This class is an part implementation of DataInput. It wraps a Reader object.
*
* @author Fred Toussi (fredt@users dot sourceforge.net)
* @version 1.9.0
* @since 1.9.0
*/

public class ReaderDataInput implements DataInput {

   protected Reader reader;
   protected int    pos;
   int              lastChar = -1;
   public ReaderDataInput(Reader reader) {
       this.reader = reader;
       this.pos    = 0;
   }
   // methods that implement java.io.DataInput
   public final void readFully(byte[] b) throws IOException {
       readFully(b, 0, b.length);
   }
   public final void readFully(byte[] bytes, int off,
                               int len) throws IOException {
       if (len < 0) {
           throw new IndexOutOfBoundsException();
       }
       int n = 0;
       while (n < len) {
           int b = read();
           if (b < 0) {
               throw new EOFException();
           }
           bytes[off + n++] = (byte) b;
       }
   }
   public final boolean readBoolean() throws IOException {
       int b = read();
       if (b < 0) {
           throw new EOFException();
       }
       return (b != 0);
   }
   public final byte readByte() throws IOException {
       int b = read();
       if (b < 0) {
           throw new EOFException();
       }
       return (byte) b;
   }
   public final int readUnsignedByte() throws IOException {
       int b = read();
       if (b < 0) {
           throw new EOFException();
       }
       return b;
   }
   public short readShort() throws IOException {
       int b1 = read();
       if (b1 < 0) {
           throw new EOFException();
       }
       int b2 = read();
       if (b2 < 0) {
           throw new EOFException();
       }
       return (short) ((b1 << 8) | b2);
   }
   public final int readUnsignedShort() throws IOException {
       int b1 = read();
       int b2 = read();
       if ((b1 | b2) < 0) {
           throw new EOFException();
       }
       return ((b1 << 8) + (b2));
   }
   public final char readChar() throws IOException {
       int b1 = read();
       int b2 = read();
       if ((b1 | b2) < 0) {
           throw new EOFException();
       }
       return (char) ((b1 << 8) + (b2));
   }
   public int readInt() throws IOException {
       throw new java.lang.RuntimeException("not implemented.");
   }
   public long readLong() throws IOException {
       throw new java.lang.RuntimeException("not implemented.");
   }
   public final float readFloat() throws IOException {
       throw new java.lang.RuntimeException("not implemented.");
   }
   public final double readDouble() throws IOException {
       throw new java.lang.RuntimeException("not implemented.");
   }
   public int skipBytes(int n) throws IOException {
       throw new java.lang.RuntimeException("not implemented.");
   }
   public String readLine() throws IOException {
       throw new java.lang.RuntimeException("not implemented.");
   }
   public String readUTF() throws IOException {
       throw new java.lang.RuntimeException("not implemented.");
   }
   public int read() throws IOException {
       if (lastChar >= 0) {
           int val = lastChar & 0xff;
           lastChar = -1;
           pos++;
           return val;
       }
       lastChar = reader.read();
       if (lastChar < 0) {
           return lastChar;
       }
       pos++;
       return lastChar >> 8;
   }

}</source>





Use DataInputStream to create double

   <source lang="java">

import java.io.DataInputStream; import java.io.FileInputStream; public class Main {

 public static void main(String[] argv) throws Exception {
   FileInputStream fileIn = new FileInputStream("data.txt");
   DataInputStream dataIn = new DataInputStream(fileIn);
   System.out.println(dataIn.readUTF());
   int counter = dataIn.readInt();
   double sum = 0.0;
   for (int i = 0; i < counter; i++) {
     double current = dataIn.readDouble();
     System.out.println("Just read " + current);
     sum += current;
   }
   System.out.println("\nAverage = " + sum / counter);
   dataIn.close();
   fileIn.close();
 }

}</source>