Bonjour à tous,
Ca fait une journée que je butte sur un problème. J'ai un client qui se connecte à un serveur et qui lui envoit un objet sérialisé. Seulement pour une question de performance je dois utilisé les channels.
Voici le code de mon client:
J'écris donc un première fois la taille de mon objet puis j'écris l'objet sérialisé. Cette partie de code ne semble pas poser de problème. Voici le code côté serveur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 bos = new ByteArrayOutputStream(); oos = new ObjectOutputStream(bos); oos.writeObject(MonMessage); oos.flush(); byte[] data = bos.toByteArray(); ByteBuffer bufferObject = ByteBuffer.wrap(data); ByteBuffer bufferSize = ByteBuffer.allocateDirect(4); bufferSize.putInt(bufferObject.capacity()); bufferSize.flip(); socketChannel.write(bufferSize); socketChannel.write(bufferObject);
Je lis donc mes 2 ByteBuffer sans aucun problème mais au moment de l'appel de la méthode array() de mon bufferObject je me tappe l'exception UnsupportedOperationException. Je ne comprends vraiment pas...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 ByteBuffer bufferSize = ByteBuffer.allocateDirect(4); int lg1 = socketChannel.read(bufferSize); bufferSize.flip(); int size = bufferSize.getInt(); ByteBuffer bufferObject = ByteBuffer.allocateDirect(size); int lg2 = socketChannel.read(bufferObject); bufferObject.flip(); byte data[] = bufferObject.array(); //Exception java.lang.UnsupportedOperationException bis = new ByteArrayInputStream(data); ois = new ObjectInputStream(bis); mes = (MonMessage)ois.readObject();
Avez-vous une idée ?
Merci d'avance...
Partager