我正在尝试从InputStream中读取一些数据,然后将它们放入StringBuffer中进行打印。
我将此代码放在main方法中。
我的问题是StringBuffer只在我调试代码时打印,当我正常运行时它没有被打印。
我的代码:
Socket s = new Socket();
String host = "";
PrintWriter s_out = null;
BufferedReader s_in = null;
InputStream in = null;
s.connect(new InetSocketAddress(host, 23));
//writer for socket
s_out = new PrintWriter(s.getOutputStream(), true);
//reader for socket
s_in = new BufferedReader(new InputStreamReader(s.getInputStream()));
in = s.getInputStream();
if(s.isConnected() == true && s.isInputShutdown() == false && s.isOutputShutdown() == false){
StringBuffer sb = new StringBuffer();
boolean found = false;
char ch;
int numberOfBytesThatCanBeRead = in.available();
for(int j = 0; j < numberOfBytesThatCanBeRead; j++){
ch = (char) s_in.read();
//System.out.print(ch);
sb.append(ch);
}
System.out.print(sb.toString());
s_in.close();
in.close();
s_out.close();
s.close();
这个变量的正确值是564,但它只在我调试代码时返回,当我正常运行它返回21时。
int numberOfBytesThatCanBeRead = in.available();
所以,我的问题是:为什么当我调试代码时,StringBuffer的结果是正确的,当我正常运行时它不是?
谢谢!
答案 0 :(得分:3)
您没有在端口上侦听循环,这意味着您在另一方完成发送其所有数据之前立即运行并结束。
当您进行调试时,意味着在尝试阅读之前有足够的时间让它全部到达。
循环读取,等待所有需要的数据到达。