Хорошо, ребята, не могли бы вы сказать, есть ли определенная ошибка в текущем коде:
//this all only for example so DO NOT use this terrible code
1 private void readIncomingData(SocketChannel channel){
2 try{ //10 - for simplicity sake
4 ByteBuffer buffer = ByteBuffer.allocate( 10 );
5 buffer.clear();
6 channel.read( buffer );
8 StringBuilder response = new StringBuilder();
9 buffer.flip();
10 Charset charset = Charset.forName(“UTF-8″);
12 //HERE IS THE DILEMMA !!!
13 response.append( charset.decode( buffer ) );
14 // Output the response
15 System.out.println( “Data read from client ” + response );
16 } catch (IOException e) {
17 e.printStackTrace();
18 }
19}
Например, входящий текст имеет кодировку UTF-8 и состоят из 9 - символы находятся в диапазоне ANCII (U + 007F) кодов, а 10 с - это первый бит комплексного UTF-8 char (U + 7FFFFFFF) , поэтому следующие 5 байтов этого символа будут только в следующем буфере.Таким образом, последний символ будет закодирован неправильно или будет пропущен.Прав ли я и как это исправить?Под фиксацией я имею в виду декодирование отдельных буферов nio, а не только всей последовательности байтов после получения всех буферов.