FileInputStream使用read()跳过整数 - Java

时间:2014-02-08 01:37:51

标签: java fileinputstream

在搜索了一段时间的答案之后,并试图理解FileInputStream.read()和FileInputStream.available()之间的区别,我仍然迷失在我编写的程序中。

public class Ex1plus2{
final static String fName= "1.dat";

public static void main(String[] args) throws FileNotFoundException,IOException {
    int[] a = new int[]{10, 20, 30, 40, 50, 60};
    //arrToFile(a);
    //arrFromFile();
    dataToFile(a);
    dataFromFile();
}

static void dataToFile(int[] a) throws IOException{
    //final String fName= "1.dat";
    try{
        File dataFile= new File (fName);
        FileOutputStream output=new FileOutputStream(dataFile);
        for (int i:a){
            output.write(i);
        }
        output.close();
    }
    catch(IOException ex){
        System.out.println("Oops! File not found...\n"
                + "System will now terminate itself");
        System.exit(0);

    }
}
static void dataFromFile() throws IOException{
    //final String fName= "1.dat";
    try{
    FileInputStream input= new FileInputStream(fName); 
    while(input.read()!=-1){
        System.out.print(input.read()+" ");
    }
    input.close();
    }
    catch(IOException ex){
        System.out.println("Oops! File not found...\n"
                + "System will now terminate itself");
        System.exit(0);


    }
}

当使用available()时,我从文件中获取完整的数组(10 20 30 40 50 60),但是当我使用read()时,我只获得了一半的数组(20 40 60)。

available()可以在它们准备就绪时读取字节,而read()阻止读取字节,直到fileOutputStream完成并关闭。 (或者我错了?)

如果是这样,那为什么会发生呢?

谢谢!

1 个答案:

答案 0 :(得分:2)

read()没有任何问题,但你在dataFromFile()中调用了两次(一次在while状态,一次在循环内),因此跳过了其他的数。这样做:

int foo=0;
while ((foo=input.read()) != -1) {
   System.out.print(foo + " ");