我没有从字符串缓冲区连续获得正确的数据

时间:2011-01-06 11:04:43

标签: java string sockets buffer

我从超级终端通过套接字获取数据,我的问题是当我连续输入数据时(同样的字母像'aaaa')它将被转换为aaáa。第三个字母改为其他格式。请提供解决方案..

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 :(得分:0)

可能是编码差异的字符集?

检查JVM使用的内容:Charset.defaultCharset()

什么使用你的超级终端?

...理想情况下,您还应提供有关如何读取数据的代码,这是一个可重现的示例。顺便说一句,我对“超级终端”一无所知,但你确定这个客户端永远不会在流中插入检查位或类似的东西吗?