繁体   English   中英

如何在Java中正确测试instanceof

[英]How to test for instanceof in java correctly

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

当前,您正在通过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");
}

进入“ if”条件的readObject()会读取该对象,因此进入“ if”的正文的下一个readObject()会发现该对象为空。

即使它有一些缺点,您也应尝试将其包装并捕获EOFException并删除“ if”。 请注意,许多情况都可能引发该异常,例如文件被截断。

try {
  ...
  byte[] fileContent = (byte[]) ObjectInputStream.readObject();
  ...
  }
}
catch (EOFException e){
... // exit the reading loop
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM