好的,所以我正在设计一个Android MUD客户端作为我学校项目的一部分。但是,我在实现ANSI颜色解析时遇到了问题。我逐字节地读取数据。我已经尝试将字符“hex”设置为'\ 033','27'和'0x1B',但我似乎永远无法检测转义字符。你检查它有什么问题吗?另外,行“char check = String.valueOf(j).charAt(0);”是暂时的,我原本试图检查字符“j”的字符变量“hex”。是否有更好的方法来检查角色?
while(isConnected) {
int j = 0;
try {
int i = arrayOfByte.length;
j = streamInput.read(arrayOfByte, 0, i);
char check = String.valueOf(j).charAt(0);
Log.d("Console","Char is - " + check);
if (j == -1)
{
Log.d("Console","j = -1");
throw new Exception("Error while reading socket.");
} else if (j == 0) {
Log.d("Console","Continuing");
continue;
} else if (check == hex) {
Log.d("Console","Yo, daddio!");
} else {
final String strData = new String(arrayOfByte, 0, j).replace("\r", "");
runOnUiThread(new Runnable() {
public void run() {
textContent.append(strData);
scrollToBottom();
}
});
}
} catch (Exception e) {
Handler handlerException = GameWindow.this.mHandler;
String strException = e.getMessage();
final String strMessage = "Error while receiving from server:\r\nConnection terminated";
Runnable rExceptionThread = new Runnable()
{
public void run()
{
Toast.makeText(context, strMessage, 3000).show();
}
};
handlerException.post(rExceptionThread);
if(strException.indexOf("reset") != -1 || strException.indexOf("rejected") != -1)
{
isConnected = false;
try
{
connectionSocket.close();
}
catch (IOException e1)
{
e1.printStackTrace();
}
}
isConnected = false;
}
}
答案 0 :(得分:1)
嗯,你正在检查读取的字节数而不是每个字节。
j = streamInput.read(arrayOfByte, 0, i);
返回读取的字节数,并将这些字节放入arrayOfByte中。
因此,您需要执行以下操作:
for (int n=0; n < j; n++)
{
if (arrayOfByte[n] == hex) Log.d("Console", "Yo, daddio!");
}