是否可以在文件-1结束前停止读取一个字节

时间:2017-10-20 17:43:26

标签: java

我用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");

3 个答案:

答案 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");
}