[英]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.");
}
}
IOUtils.toString()
方法可能嘗試讀取EOS,因此,如果對等方未關閉連接,您將永遠在這里阻塞。 我的猜測是,您正在從輸入流中讀取內容,然后也使用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.