InputStream在文件结束前返回-1

时间:2011-05-11 02:44:48

标签: java

我正在从服务器传输文件,然后将其流回到套接字(基本上是流代理)。这用于缓冲歌曲。因此,一旦缓冲区已满,就不会再从套接字读取数据,直到缓冲区清空。但是,一旦读取了更多数据,InputStream将读取X个更多字节,然后突然返回-1表示文件末尾的信号,而不是。是否发生超时?

以下是一些示例代码:

  InputStream data = realResponse.getEntity().getContent();

  ...some code...

  int totalBytes = 0;
  int count = 0;
  // Start streaming content.
  byte[] buff = new byte[1024 * 50];
  while (isRunning && (readBytes = data.read(buff, 0, buff.length)) != -1) {
    totalBytes += readBytes;

    Log(count + ": buffer:" + buff + " readBytes:" + readBytes + " total:" + totalBytes);
    client.getOutputStream().write(buff, 0, readBytes);
    Log("Finished write");
    count++;          

  }

日志的示例如下:

0: buffer:B@45030a50 readBytes: 16164 total: 16164
1: buffer:B@45030a50 readBytes: 16384 total: 32548
...
100: buffer:B@45030a50 readBytes: 16384 total: 1654564
<a long pause here>
100: buffer:B@45030a50 readBytes: 16384 total: 1670948
100: buffer:B@45030a50 readBytes: 16384 total: 1687332
-1 Received

感谢任何帮助或建议

1 个答案:

答案 0 :(得分:0)

read()在流的末尾返回-1而不是之前。如果你比预期更早得到-1,那么数据比预期的要短,或者服务器比预期更早地结束了他的结束。