Java 是否可以在文件-1结尾之前停止读取字节

Java 是否可以在文件-1结尾之前停止读取字节,java,Java,我刚开始用java编程一个月,我需要一些帮助。我有一个客户端服务器套接字应用程序。我只能控制客户端,所以我从BufferedInputStream读取数据,但问题是我只需要读取XML,而忽略流结束字符/整数255。电流输出带有� 在控制台中。我是否可以在读取传入数据时忽略最后一个字符 下面是我的代码: //Date date = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy MMM

我刚开始用java编程一个月,我需要一些帮助。我有一个客户端服务器套接字应用程序。我只能控制客户端,所以我从BufferedInputStream读取数据,但问题是我只需要读取XML,而忽略流结束字符/整数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");

您可以使用以下内容:

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是一个字符值。谢谢大家,我将尝试您的每一个建议,并尽快共享状态更新。我真诚地感谢你的帮助,谢谢