如何正确测试java中的instanceof

时间:2015-11-19 08:05:00

标签: java ioexception instanceof eofexception

我在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");
}

2 个答案:

答案 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
}