簡體   English   中英

Java inputStream到String掛起

[英]Java inputStream to String Hangs

我正在開發一種工具來獲取客戶端信息,發送到服務器,然后再次接收信息(代理)。 我還試圖轉儲從服務器接收的數據。 我可以讀取inputStream的Integer表示形式,但無法讀取String格式。 我已經嘗試了下面的示例,但是它掛起並且從不連接到服務器。 另外,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.");
   }
}
  1. 您發布的代碼不會嘗試連接到服務器,但是如果其中任何一個執行,則您必須已經連接。
  2. 如果您的程序在此代碼中掛起,則服務器尚未發送任何數據,或者IOUtils.toString()方法可能嘗試讀取EOS,因此,如果對等方未關閉連接,您將永遠在這里阻塞。
  3. 如果您的程序掛在readLine()調用上,則意味着對等方尚未發送要讀取的行。

我的猜測是,您正在從輸入流中讀取內容,然后也使用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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM