Java 是否可以在文件-1结尾之前停止读取字节
我刚开始用java编程一个月,我需要一些帮助。我有一个客户端服务器套接字应用程序。我只能控制客户端,所以我从BufferedInputStream读取数据,但问题是我只需要读取XML,而忽略流结束字符/整数255。电流输出带有� 在控制台中。我是否可以在读取传入数据时忽略最后一个字符 下面是我的代码:Java 是否可以在文件-1结尾之前停止读取字节,java,Java,我刚开始用java编程一个月,我需要一些帮助。我有一个客户端服务器套接字应用程序。我只能控制客户端,所以我从BufferedInputStream读取数据,但问题是我只需要读取XML,而忽略流结束字符/整数255。电流输出带有� 在控制台中。我是否可以在读取传入数据时忽略最后一个字符 下面是我的代码: //Date date = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy MMM
//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");
您可以使用以下内容:
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");
}
你的代码是正确的。错误在服务器上。解决这个问题。它不应该传输255
或者可能没有什么真正的问题需要解决,只有显示问题。如果您将该XML提供给任何正确编写的XML解析器,它将在结束时停止,并忽略其后的任何内容,感谢您的帮助。我最终还是用下面的代码做到了。客户端服务器应用程序现在正在产品上运行。非常感谢你的帮助
//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");
您认为最后一个字符后面会是什么?255是XML末尾的字符。例如,套接字服务器正在发送XML字符串255。我只想读取传入响应的XML部分,不需要附加255。请帮忙!!然后添加
if(buffer[length-1]==255)长度--在write()
调用之前,在循环内部添加code>。谢谢Andrewa,我添加了if(buffer[length-1]==255)length--;但我仍然能在电影结尾看到这个角色XML@Andreas这应该是(byte)255
,或者-1
,而不是255
,它们永远不会匹配一个字节,但所有这些都是在错误的一端攻击问题。问题清楚地表明它是单个字符,甚至显示了它是如何打印的。如果输入是:255,那么它显然不是单个字符。阅读问题。OP清楚地说明了“流结束字符”和“最后一个字符”,她还发布了它的外观,这是一个字形。不是三个,也不是255
。很明显,255是一个字符值。谢谢大家,我将尝试您的每一个建议,并尽快共享状态更新。我真诚地感谢你的帮助,谢谢