在搜索了一段时间的答案之后,并试图理解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完成并关闭。 (或者我错了?)
如果是这样,那为什么会发生呢?
谢谢!
答案 0 :(得分:2)
read()
没有任何问题,但你在dataFromFile()
中调用了两次(一次在while
状态,一次在循环内),因此跳过了其他的数。这样做:
int foo=0;
while ((foo=input.read()) != -1) {
System.out.print(foo + " ");