我用java编程只用了一个月,我需要一些帮助。我有一个Client-Server Socket应用程序。我只能控制客户端,所以我从BufferedInputStream中读取,但问题是我只需要读取XML并忽略Stream字符/整数255的结束。当前输出在控制台中带有�。在读取传入数据时,我是否可以忽略最后一个字符?
以下是我的代码:
//Date date = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy MMM dd HH:mm:ss");
BufferedInputStream in = new BufferedInputStream(clientSocket.getInputStream());
ByteArrayOutputStream result = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = in.read(buffer)) != -1) {
result.write(buffer, 0, length);
String loginResponse = result.toString();
System.out.println(formatter.format(System.currentTimeMillis())+ " " +loginResponse + " \n");
答案 0 :(得分:0)
您的代码是正确的。错误发生在服务器上。修复它。它不应该传输255。
或者也许没有真正需要解决的问题,只有显示问题。如果您将XML提供给任何正确编写的XML解析器,它将在结束/>
处停止并忽略其后的任何内容,
答案 1 :(得分:0)
感谢您的帮助。我最终设法使用下面的代码。客户端服务器应用程序现在正在生产中运行。非常感谢你的帮助。
//Date date = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy MMM dd HH:mm:ss");
BufferedInputStream in = new BufferedInputStream(clientSocket.getInputStream());
ByteArrayOutputStream result = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = in.read(buffer)) != -1) {
if (buffer[length - 1] == 255) length--;
result.write(buffer, 0, length);
String loginResponse = result.toString();
//Remove last appended Octet
String ussdmsg = loginResponse.substring(0, loginResponse.length() - 1);
System.out.println(formatter.format(System.currentTimeMillis())+ " " +ussdmsg + " \n");
答案 2 :(得分:-1)
您可以使用以下内容:
while ((length = in.read(buffer)) != -1) {
if (length>=3) {
if ((buffer[length-1] == '5') && (buffer[length-2] == '5') && (buffer[length-3] == '2')) {
buffer[length-3] = '\0';
buffer[length-2] = '\0';
buffer[length-1] = '\0';
length -=3;
}
}
result.write(buffer, 0, length);
String loginResponse = result.toString();
System.out.println(formatter.format(System.currentTimeMillis())+ " " +loginResponse + " \n");
}