如果我通过ObjectOutputStream将列表对象发送到服务器,该列表对象为空,那么我得到了一个异常。 所以,我想检查服务器端的ObjectInputStream是否为空。 但我不知道该怎么做。
ois.available()和ois.readObject!= null都不起作用。
这是一个示例代码: 客户端:
String str= null;//"Hello \n";
//Nachricht mit AES verschlüsseln und an Server senden
cipherAES.init(Cipher.ENCRYPT_MODE, encryptionKey, iv);
byte[] input = str.getBytes();
byte[] ctLength = cipherAES.doFinal(input);
List<Byte> messageToServer = new ArrayList<>();
for(int i = 0; i < ctLength.length; i++){
messageToServer.add(ctLength[i]);
}
//3. OUTPUTSTREAM#############################################################################
oos.writeObject(messageToServer);
os.flush();
服务器
//3.INPUTSTREAM#####################################################################
//ois.availale();At this place, it doesnt work. if List<Byte> isn't null result = 0;
//Empfange Clients verschlüsselte Nachricht
List<Byte> encryptedMessageFromClient = (List<Byte>) ois.readObject();
// At this place ois.available retruns the value of the Object, if the object isnt null;
//#####################################################################
答案 0 :(得分:0)
如果在writeObject()的帮助下序列化包含空值的List并尝试在服务器端反序列化它,则会再次为null。
我们没有objectOutputStream.available()方法,但是我们有objectInputStream.available(),它返回可以不阻塞地读取的字节数。
请注意
Java中的ObjectOutputStream可用于将对象转换为OutputStream。将对象转换为流的过程在java中称为序列化。
和
Java ObjectInputStream类(java.io.ObjectInputStream)使您能够从InputStream中读取Java对象,而不仅仅是原始字节。您将InputStream包装在ObjectInputStream中,然后您可以从中读取对象。当然,读取的字节必须代表有效的序列化Java对象。否则读取对象将失败。
答案 1 :(得分:-1)
解决。没有专利补救措施。 所以,如果你有几个ObjectInputStreams,那么使用“instanceof”或“!instanceof”。
请注意:instanceof不接受通用对象。
编辑:代码示例:客户端:
if (str != null){
//Nachricht mit AES verschlüsseln und an Server senden
cipherAES.init(Cipher.ENCRYPT_MODE, encryptionKey, iv);
byte[] input = str.getBytes();
byte[] ctLength = cipherAES.doFinal(input);
List<Byte> messageToServer = new ArrayList<>();
for(int i = 0; i < ctLength.length; i++){
messageToServer.add(ctLength[i]);
}
//3.
OUTPUTSTREAM##############################################
oos.writeObject(messageToServer);
os.flush();
}
代码示例服务器:
//3.INPUTSTREAM######################################
Object readed = ois.readObject();
//##################################################
if(!(readed instanceof requiredObject)){
objectYouNeed = (cast_it)Object;
}else
{
--> Go on with another Object which is in the stream
}