BufferedReader.readLine()未返回。获取读取超时[重复]

问题描述 投票:-1回答:1

我附上以下代码。我能够写数据。但是我无法读取数据。但是在网络中,我可以看到客户端正在发送数据。 BufferedReader.readLine()不返回,并且在超时后读取超时即将到来。请在这里检查并帮助我。谢谢

    @Override

public void run()

{

    Log.i(LOG_TAG,"run() called");

    try

    {

        createHandler();

        sslSocket.setSoTimeout(1000*30);


        bufferedWriter = new BufferedWriter(new OutputStreamWriter(sslSocket.getOutputStream()));
        bufferedReader = new BufferedReader(new InputStreamReader(sslSocket.getInputStream()));


        writeData(getInitialStateData());



        Log.i(LOG_TAG,"written to output stream");

        Log.d(LOG_TAG,"before reading bufferedReader and input shutdown status is "+sslSocket.isInputShutdown());

        String inputLine = bufferedReader.readLine();
        Log.d(LOG_TAG,"Ravi after reading bufferedReader and inputLine is "+inputLine);

        while(inputLine != null)

        {

            Log.e(LOG_TAG,"Ravi run(), data == "+inputLine);

            Message message = new Message();

            message.obj = inputLine;

            receiverHandler.handleMessage(message);
            inputLine = bufferedReader.readLine();

        }





    }

    catch (Exception e)

    {

        Log.e(LOG_TAG,"Exception in run() "+e);

    }

}
java bufferedreader readline
1个回答
0
投票

BufferedReader.readLine()将读取一行,直到遇到\n\r或两者。如果您的信息流没有发送这些信息,它将继续尝试读取它。尝试使用read方法,并将char数组作为保存信息的缓冲区传递并将其附加到字符串:

@Override
public void run() {
  Log.i(LOG_TAG,"run() called");

  try (bufferedWriter = new BufferedWriter(new OutputStreamWriter(sslSocket.getOutputStream()));
       bufferedReader = new BufferedReader(new InputStreamReader(sslSocket.getInputStream()))) {

      createHandler();

      sslSocket.setSoTimeout(1000*30);

      writeData(getInitialStateData());

      Log.i(LOG_TAG,"written to output stream");

      Log.d(LOG_TAG,"before reading bufferedReader and input shutdown status is "+sslSocket.isInputShutdown());

      int read = 0;
      char[] buffer = new char[1024];
      StringBuilder sb = new StringBuilder();
      while((read = bufferedReader.read(buffer, 0, buffer.length)) > 0 {

        Log.e(LOG_TAG,"Ravi run(), data read == " + read);
        sb.append(Arrays.copyOf(buffer, read));

      }

      Message message = new Message();
      message.obj = sb.toString();

      receiverHandler.handleMessage(message);
  } catch (Exception e) {
    Log.e(LOG_TAG,"Exception in run() "+e);
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.