2014-10-18 2 views
2

안녕 모두들 자바 데이터 입력 출력 스트림으로 연습하고 있습니다. 하지만 난 내 파일에 데이터 입력 스트림을 쓸 수있는이 문제를 해결할 수 있지만 읽을 수없는 방법을 모르는 것이 여기자바 입출력 스트림을 읽을 수 없습니다

내 코드입니다 :

public static void readDataIOStream(){ 
      DataInputStream dataIn = null; 

      int i = 10; 
      double d = 1023.56; 
      boolean b = true; 

      try { 
       dataIn = new DataInputStream(
         new FileInputStream("test.txt")); 

       i = dataIn.readInt(); 
       System.out.println("Reading " + i); 
       d = dataIn.readDouble(); 
       System.out.println("Reading " + d); 
       b = dataIn.readBoolean(); 
       System.out.println("Reading " + b); 
       d = dataIn.readDouble(); 
       System.out.println("Reading " + d); 
      } catch (FileNotFoundException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      }try { 
       dataIn.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 

     public static void writeDataIOStream(){ 
      DataOutputStream dataOut = null; 

      int i = 10; 
      double d = 1023.56; 
      boolean b = true; 

      try { 
       dataOut = new DataOutputStream(new FileOutputStream("test.txt")); 
       System.out.println("Writing " + i); 
       dataOut.write(i); 
       System.out.println("Writing " + d); 
       dataOut.writeDouble(d); 
       System.out.println("Writing " + b); 
       dataOut.writeBoolean(b); 
       System.out.println("Writing " + 12.2 * 7.4); 
       dataOut.writeDouble(12.2 * 7.4); 
      } catch (FileNotFoundException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      }finally{ 
       try { 
        dataOut.close(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     } 

여기에 오류가 :

java.io.EOFException 
    at java.io.DataInputStream.readFully(Unknown Source) 
    at java.io.DataInputStream.readLong(Unknown Source) 
    at java.io.DataInputStream.readDouble(Unknown Source) 
    at bytestream.DataIOStream.readDataIOStream(DataIOStream.java:108) 
    at bytestream.DataIOStream.main(DataIOStream.java:16) 
Writing 10 
Writing 1023.56 
Writing true 
Writing 90.28 
Reading 172003324 
Reading 8.029891292620447E283 
Reading true 

내가 데이터 입력 스트림

답변

1

dataOut.write(i)을 읽을 수없는 이유 제발 도와주세요 하나의 바이트를 기록합니다. 그러나 i = dataIn.readInt() 일을 수행하는 int은 4 바이트입니다.

따라서 double 인 마지막 요소를 읽으려고하면 8 바이트 (double의 길이)를 읽으려고하는 동안 스트림에 5 바이트 만 있으므로 예외가 발생합니다.

int을 쓰거나 읽으므로 dataOut.write(i) 대신 dataOut.writeInt(i)으로 전화해야합니다.

+1

감사합니다. 내게 understant – tienvv1234

+0

대신'dataOut.write (i);'가 없습니다. – Rustam

관련 문제