StringBuffer未正确打印

时间:2014-05-29 17:36:15

标签: java string sockets inputstream bufferedreader

我正在尝试从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的结果是正确的,当我正常运行时它不是?

谢谢!

1 个答案:

答案 0 :(得分:3)

您没有在端口上侦听循环,这意味着您在另一方完成发送其所有数据之前立即运行并结束。

当您进行调试时,意味着在尝试阅读之前有足够的时间让它全部到达。

循环读取,等待所有需要的数据到达。