package com.xyd.java.lesson12;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Arrays;
public class ReaderAndWriterDemo {
  public static void main(String[] args) {
      int a[] =new int[8];
try {
DataInputStream input = new DataInputStream(new FileInputStream("d:\\FileDemo1.dat")); 
     DataOutputStream output = new DataOutputStream(new FileOutputStream("e:\\FileDemo1.dat"));
for(int i=0;i<a.length;i++){
a[i]=input.readInt();//为什么这句话出异常
}
    input.close();
    Arrays.sort(a);
    for(int j=0;j<a.length;j++){
    output.writeInt(a[j]);
    }
    output.close();
  } catch (Exception e) {
e.printStackTrace();
}
      }
       }

解决方案 »

  1.   

    你确定事先已经writeInt进去了8个int吗?
      

  2.   

    抛出的异常是EOFException还是IOException EOFException 如果此输入流在读取这四个字节之前到达末尾。
    IOException 该流已关闭并且包含的输入流在关闭后不支持读取操作,或者发生其他 I/O 错误。
      

  3.   


    不能直接写的,要用readInt方法写8个int
      

  4.   

    //inputstream 一次读一个byte//int 有4个byte,故读四次//首次读的ch1是这个整数的高8bit,故前移(4×8-8×1=24),同理ch2 前移(4×8-8×2=18)位public final int readInt() throws IOException {
            int ch1 = in.read();
            int ch2 = in.read();
            int ch3 = in.read();
            int ch4 = in.read();
            if ((ch1 | ch2 | ch3 | ch4) < 0)
                throw new EOFException();
            return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0));
        }
      

  5.   

    你往FileDemo1.dat先写32个整数以上试试,就不会报错了,然后再去分析每次从inputstream读出是不是一个字节,写的时候也再调试分析下酒明白了。
      

  6.   


    用 writeInt方法先写进行8个int
      

  7.   

    public class ReaderAndWriterDemo {
      public static void main(String[] args) {
        Collection <Integer>list=new ArrayList<Integer>();
    try {
    DataInputStream input = new DataInputStream(new FileInputStream("d:\\FileDemo1.txt")); 
         DataOutputStream output = new DataOutputStream(new FileOutputStream("e:\\FileDemo1.txt"));
    int m=input.readInt();
      while(m!=-1)
    list.add(m);
        input.close(); 
      Object a[]=list.toArray();
         Arrays.sort(a); 
         Iterator <Integer> itr=list.iterator();
             if(itr.hasNext()){
              int x=(int)itr.next();
             output.writeInt(x);
             }
          output.close();
      } catch (Exception e) {
       e.printStackTrace();
    }
          }
           }出现Exception in thread "main" java.lang.OutOfMemoryError: Java heap space是什么意思?(list.add(m);)出现这个异常