不读取android中的整个输入流

时间:2012-02-21 14:15:40

标签: android

我正在尝试从服务器读取响应并将其从InputStream转换为String但出现问题,我现在看不到原因。

InputStream is = entity.getContent();
FileOutputStream folder = new FileOutputStream(
            Environment.getExternalStorageDirectory()
                    + "/test.xml");
try {
byte[] buf = new byte[1048576];
int current = 0;
int newCurrent = 0;
while ((current = is.read(buf)) != -1) {
    newCurrent = newCurrent + current;
    folder.write(buf, 0, current);
}
System.out.println("returned folder" + folder);
folder.flush();
} catch (IOException e) {
        System.out.println("error on reading input: " + e.getMessage());
    }

这是错误:

    error on reading input: Socket closed

这是我得到的错误,另一个我不明白的问题是它为什么不读取InputStream中的整个内容(也许是因为它全部在一行?)。 感谢。

2 个答案:

答案 0 :(得分:3)

你不需要一次性读取整个流并将其放在一个字节数组中,实际上你是通过while循环读取它并将内容逐渐放入文件流中:

int count;
byte[] filebytes = new byte[1024];
while((count = is.read(filebytes)) != -1){
   folder.write(filebytes, 0, count);   //writing buffer into file
}
in.close();
folder.flush();
folder.close();

答案 1 :(得分:0)

根据堆栈跟踪,您的代码使用时readLine()发生了崩溃。read(buf)

这些匹配在一起吗?