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 : 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);
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
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...