gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:14:05 25 4
gpt4 key购买 nike

在寻找答案一段时间并尝试理解 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 完成并关闭。 (还是我错了?)

如果是这样,那么为什么会发生这种情况?

谢谢!

最佳答案

read() 没有任何问题,但是您在 dataFromFile() 中调用它两次(一次在 while 条件下)一旦进入循环),因此会跳过所有其他数字。改为这样做:

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

关于java - FileInputStream 使用 read() 跳过整数 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21640797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com