SocketChannel et Sérialisation
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:
Code:
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); |
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:
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(); |
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...
Avez-vous une idée ?
Merci d'avance...