我在Java中测试ObjectInputStream
。当我包含if语句时,我得到一个EOF错误。如何正确测试进入流中的对象?输入流对象的类型为byte[] array
。
if (ObjectInputStream.readObject() instanceof byte[]) {
// what to get the new file
System.out.println("Getting File");
fileFromServer = new File("/Users/joshuataylor/git/swd_jtylor/oral_exam2/27-13_FileRetrieve_Easy/src/output.txt");
byte[] fileContent = (byte[]) ObjectInputStream.readObject();
System.out.println(fileContent.length);
Files.write(fileFromServer.toPath(), fileContent);
ObjectOutputStream.flush();
message = "End Connection";
System.out.println("eof");
}
答案 0 :(得分:1)
目前您正在通过ObjectInputStream.readObject()
读取两个对象 - 一个在条件中,另一个在if块内。
您应该只调用一次ObjectInputStream.readObject()
并将其存储在变量中:
Object obj = ObjectInputStream.readObject();
if (obj instanceof byte[]) {
// what to get the new file
System.out.println("Getting File");
fileFromServer = new File("/Users/joshuataylor/git/swd_jtylor/oral_exam2/27-13_FileRetrieve_Easy/src/output.txt");
byte[] fileContent = (byte[]) obj;
System.out.println(fileContent.length);
Files.write(fileFromServer.toPath(), fileContent);
ObjectOutputStream.flush();
message = "End Connection";
System.out.println("eof");
}
答案 1 :(得分:0)
将readObject()放入" if"条件读取对象,所以下一个readObject()进入&#34的主体;如果"发现它是空的。
即使它有一些缺点,你也应该在try中包装它并捕获EOFException并删除" if"。 请注意,许多情况可能会引发该异常,例如截断文件。
try {
...
byte[] fileContent = (byte[]) ObjectInputStream.readObject();
...
}
}
catch (EOFException e){
... // exit the reading loop
}