Java inputStream to String Hangs



我正在开发一个工具来获取客户端信息,发送到服务器,然后再次接收信息(代理)。我还试图转储从服务器接收的数据。我可以读取输入流的整数表示形式,但我无法读取字符串格式。我尝试了下面的示例,但它挂起并且从未连接到服务器。此外,System.out.println(inputStream.nextLine()) 仅显示一行并挂起。

public void run() {
   try {
       int i;
       while ((i = inputStream.read()) != -1){
           System.out.println(IOUtils.toString(inputStream));
           outputStream.write(i);
       }
   } catch (IOException e) {
       System.out.println("Lost connection to the client.");
   }
}

我的猜测是,您正在从输入流中读取,然后使用 IOUtils 库也从流中读取。我怀疑您的应用程序正在从输入流中读取第一个字节,然后使用 IOUtils 库读取输入流的其余部分,然后打印出读取的初始字节。

从循环中调用IOUtils.toString(inputstream)没有任何意义。该方法调用会将输入流中的所有数据放入字符串中。为什么在这种情况下有循环?

您可能希望尝试不使用 IOUtils 库来实现此目的。只需读取一个字节的数据,将其推送到 StringBuilder 中,然后打印该字节。在这种方法中,循环是必要的,你可能会得到你想要的东西。

尝试这样的事情,但根据需要修改它以同时将数据打印到输出流:

public static String inputStreamToString(final InputStream is, final int bufferSize)
{
  final char[] buffer = new char[bufferSize];
  final StringBuilder out = new StringBuilder();
  try {
    final Reader in = new InputStreamReader(is, "UTF-8");
    try {
      for (;;) {
        int rsz = in.read(buffer, 0, buffer.length);
        if (rsz < 0)
          break;
        out.append(buffer, 0, rsz);
      }
    }
    finally {
      in.close();
    }
  }
  catch (UnsupportedEncodingException ex) {
    /* ... */
  }
  catch (IOException ex) {
      /* ... */
  }
  return out.toString();
}
  1. 您发布的代码不会尝试连接到服务器,但如果其中任何代码执行,则必须已连接。
  2. 如果您的程序在此代码中挂起,则服务器尚未发送任何数据,或者IOUtils.toString()方法可能尝试读取EOS,因此,如果对等方不关闭连接,您将永远阻止此处。
  3. 如果你的程序在readLine()调用时挂起,这意味着对等方没有发送一行来读取。

相关内容

  • 没有找到相关文章

最新更新