gpt4 book ai didi

java - 从二进制文件中读取结构化数据的循环 - Java

转载 作者:行者123 更新时间:2023-12-01 11:55:53 27 4
gpt4 key购买 nike

我正在尝试读取一组结构化数据温度测量值。数据将作为 5 个整数(然后转换为日期)和 1 个 double 值(温度)的集合写入二进制 (dat) 文件。

我可以从第一个测量开始读取,但是我想仅使用循环浏览其他测量。我知道它保存在文件中,因为我没有循环地检查了它。

我用下面的代码得到了StreamClosedException,这很清楚,但是JDK不允许我在循环之后放置close语句,而且我不知道如何做到这一点。将不胜感激的帮助。

public String readFile() {

String s = "";
int y, m, d, h, mm = 0;
double p = 0;

try {
FileInputStream fis = new FileInputStream(fileLocation);
BufferedInputStream bis = new BufferedInputStream(fis);
DataInputStream dis = new DataInputStream(bis);

while (true) {
y = dis.readInt();
m = dis.readInt();
d = dis.readInt();
h = dis.readInt();
mm = dis.readInt();
temp = dis.readDouble();

System.out.println("Measure from : " + y + "-" + m + "-" + d
+ " " + h + ":" + mm + " ,temp: " + temp);
dis.close();
}

} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
return s;
}

最佳答案

当使用try, catch block 时,还可以使用finally

无论尝试成功结束还是导致捕获的异常,都会调用此 block 。在这个finally block 中,您应该关闭所有流。

使用此方法,您还应该在 block 外部声明所需的对象,然后从内部进行分配。这是使用 dis 的示例,您需要添加其他对象。

DataInputStream dis;

try{

// other stream assignments
dis = new DataInputStream(bis);
// write data

...
} catch (IOException ex) {

ex.printStackTrace();
} finally {

// close other streams
dis.close();
}

回到你的循环,使用 while(true) 循环并不是一个好习惯,相反,使用能够在循环内更改的条件 boolean 值

boolean run = true;

while(run){

// do stuff
if ( condition ) {
run = false;
}
}

如果您尝试在 while 循环之后添加 dis.close(),并使用 (true) 硬编码,您的编译器将抛出警告,因为它知道它永远不应该到达该点在代码中。如果添加条件 while 循环,该警告就会消失。

关于java - 从二进制文件中读取结构化数据的循环 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28448228/

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