【问题标题】:How to read buffered data as it arrives rather than when the buffer is full?如何在缓冲数据到达时而不是在缓冲区已满时读取缓冲数据?
【发布时间】:2014-09-09 07:56:13
【问题描述】:

使用 Android,我正在从微控制器读取数据(有符号字节数组)。我知道BufferedReader 的缓冲区大小为 8192 字节。我每秒发送大约 200-300 个字节,这意味着在调试器读取字节数组之前我必须等待大约 25-30 秒 (8192/300)。

我想在每次 Android 收到 200-300 字节数组(每个完整的 TCP 数据包)时阅读此内容有没有办法改变 BufferedReader 的最大字节大小,或者有其他方法吗这个?

private BufferedReader input;
  input = new BufferedReader(new InputStreamReader(
      this.clientSocket.getInputStream()));
  ...
  ...
  while(true)
  {
    try
    {
      Log.i("WaitingForSomeData","");
      String read = input.readLine();
      byte[] bytes = read.getBytes();
    }

【问题讨论】:

    标签: java android tcp inputstream bufferedreader


    【解决方案1】:

    我正在从微控制器读取数据(有符号字节数组)

    如果你想缓冲二进制数据,你应该使用BufferedInputStream

    您当前正在尝试读取字符流。您的readLine() 方法将阻塞,直到收到\r\n\r\n。我猜这会导致您的延迟,因为您正在等待 0x0A0x0D 字节方便地到达。

    【讨论】:

    • 我会试试的! :) 确实有道理,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    相关资源
    最近更新 更多