Я не получаю правильные данные непрерывно из строкового буфера - PullRequest
0 голосов
/ 06 января 2011

Я получаю данные из гипертерминала через сокет, мой вопрос: пока я непрерывно набираю данные (то же самое, что и «аааа»), они будут преобразованы в аааа. Третья буква изменена на другой формат. пожалуйста, предоставьте решение ..

SocketChannel sChannel = (SocketChannel)selKey.channel();
ByteBuffer bb=ByteBuffer.allocateDirect(1024);
sChannel.read(bb);
bb.flip();
Charset charset = Charset.forName("ISO-8859-1");
CharsetDecoder decoder = charset.newDecoder();
String str=decoder.decode(bb).toString();
StringBuffer sb = (StringBuffer)selKey.attachment();
sb.append( str );
bb.clear( );

String line = sb.toString();
if ((line.indexOf("\n") != -1) || (line.indexOf("\r") != -1)) 
{
    sb.delete(0,sb.length());
    System.out.print(line);
}

спасибо заранее

1 Ответ

0 голосов
/ 06 января 2011

Возможно, есть различия в кодировке набора символов?

Чтобы проверить, что использует ваша JVM: Charset.defaultCharset()

Что использует ваш гипертерминал?

... в идеале вы также должны предоставитькод, воспроизводимый пример того, как вы читаете данные.Кстати, я ничего не знаю о «гипертерминалах», но вы уверены, что этот клиент никогда не вставляет контрольные биты или подобные вещи в поток?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...