[英]Reading loop of structured data from binary file - Java
我正在嘗試閱讀一組結構化數據溫度度量。 數據以5個整數(然后轉換為Date)和1個double(溫度)的集合形式寫入二進制(dat)文件。
我可以從第一個度量中讀取內容,但是我想僅使用循環來瀏覽其他度量。 我知道它已保存在文件中,因為我沒有循環檢查它。
我得到StreamClosedException
帶有以下代碼的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
塊時,也可以使用finally
。
無論嘗試成功結束還是導致捕獲的異常,都會調用此塊。 在這個最后的塊中,應該關閉所有流。
使用此方法,您還應該在塊外部聲明所需的對象,然后從內部進行分配。 這是使用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 run = true;
while(run){
// do stuff
if ( condition ) {
run = false;
}
}
如果您嘗試在while循環之后添加帶有硬編碼(true)的dis.close()
,則編譯器將發出警告,因為它知道該代碼永遠都不會到達該點。 如果添加條件while循環,該警告將消失。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.