2014-02-08 4 views
0

После поиска ответа на некоторое время и попытки понять разницу между FileInputStream.read() и FileInputStream.available() Я все еще теряюсь с программой, которую я имею написано.FileInputStream skipping Целые числа с read() - Java

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); 


    } 
} 

При использовании имеющимся() Я получаю полный массив из файла (10 20 30 40 50 60), но когда я использую чтение() Я получаю только половину массива (20 40 60).

Доступно() может читать байты, когда они готовы, в то время как read() блокирует чтение байтов до тех пор, пока fileOutputStream не будет завершен и не закрыт. (Или я ошибаюсь?)

ЕСЛИ это так, то почему это происходит?

Спасибо!

ответ

2

Там нет ничего плохого с read(), но вы вызываете его дважды в dataFromFile() (один раз в состоянии while и один раз внутри цикла), отсюда и пропуск любого другого числа. Вместо этого:

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

Ах, не заметил этого. Но все же, почему он работает с доступными тогда? – Mapisto

+0

Ничего, подумал. спасибо! вы очень помогли :) – Mapisto

Смежные вопросы