[英]Java can't reach case 283 in switch
我在使用 Java 时遇到了一个奇怪的问题,在使用 Sockets 时,我创建了一个case LOGOUT:
(283) 供服务器处理(客户端发送不同的整数来指定对服务器的服务请求),但在我的交换机中,LOGOUT 情况无法访问出于某种原因(IntelliJ 告诉我此语句无法访问)。 所以我尝试了System.out.println(ServiceId)
并且它总是与 283 不同的数字(不是随机数字),这真的很奇怪。 我通过更改数字解决了这个问题。 显然,数字 283 不在其他变量中。 可能是 Java 使用值为 283 的最终静态 int 来做其他事情吗?
PS : 会不会是 switch 有最大语句数,这个数小于 283?
private static void getService(Socket s) throws IOException {
InputStream inputStream = s.getInputStream();
int servId = inputStream.read();
OutputStream outputStream = s.getOutputStream();
Runnable task;
System.out.println("***************** " + servId); // this servID should be the number 283 but it's not.
switch(servId) {
case REPLY_EMAIL:
case FORWARD_EMAIL:
case REPLY_ALL_EMAIL:
case WRITE_EMAIL:
outputStream.write(SUCCESS_RESPONSE);
task = new EmailReceiver(s,lock, servId, serverLog);
threadPool.execute(task);
break;
case LOGOUT:
outputStream.write(SUCCESS_RESPONSE);
threadPool.execute(new Runnable() {
@Override
public void run() {
try {
String user = Utils.getUser(s);
serverLog.writeLog("L'utente " + user + " si è disconnesso.");
} catch (IOException e) {
e.printStackTrace();
}
}
});
break;
case READ_ALL_EMAILS:
outputStream.write(SUCCESS_RESPONSE);
task = new EmailReader(s, serverLog);
threadPool.execute(task);
break;
case USER_LIST:
outputStream.write(SUCCESS_RESPONSE);
task = new UserGetter(s, serverLog);
threadPool.execute(task);
break;
case LOGIN:
outputStream.write(SUCCESS_RESPONSE);
task = new UserLogin(s, serverLog);
threadPool.execute(task);
break;
case DELETE_EMAIL:
outputStream.write(SUCCESS_RESPONSE);
task = new EmailDelete(s, serverLog);
threadPool.execute(task);
break;
case NOTIFICATION:
outputStream.write(SUCCESS_RESPONSE);
task = new Notificator(s, serverLog);
threadPool.execute(task);
break;
default:
serverLog.writeLog("Errore di Richiesta");
outputStream.write(FAILURE_RESPONSE);
break;
}
}
package common;
public class ServiceID {
public static final int WRITE_EMAIL = 84;
public static final int READ_ALL_EMAILS = 50;
public static final int FORWARD_EMAIL = 94;
public static final int REPLY_EMAIL = 95;
public static final int REPLY_ALL_EMAIL = 96;
public static final int DELETE_EMAIL = 100;
public static final int LOGIN = 11;
public static final int USER_LIST = 111;
public static final int SUCCESS_RESPONSE = 1;
public static final int FAILURE_RESPONSE = -1;
public static final int NOTIFICATION = 118;
public static final int EMAIL_NOT_FOUND = 404;
public static final int LOGOUT = 283;
}
这两段代码是我从 InputStream 获取 ServiceID 的函数。 另一类是所有可能的 serviceID 号。 不要写:“您可能错误地传递了 serviceID”,因为事实并非如此,所有其他 ServiceID 都正常工作。
如果 InputStream 是java.io.InputStream
,则返回值是 8 位值(或 -1),因此不会匹配 283。
public abstract int read() 抛出 IOException
从输入流中读取下一个字节的数据。 值字节以 0 到 255 范围内的 int 形式返回。如果由于已到达流末尾而没有可用字节,则返回值 -1。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.