Gabriela Radu
Gabriela Radu

Reputation: 767

Does not read the entire input stream in android

I am trying to read a response from a server and transform it from InputStream to String but something goes wrong and i cannot see right now why.

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());
    }

This is the error:

    error on reading input: Socket closed

This is the error I get and another problem that i don't understand is why it does not read the entire content from InputStream(maybe because it's all in one line?). Thanks.

Upvotes: 0

Views: 455

Answers (2)

k3b
k3b

Reputation: 14755

According to stacktrace your crash happens in readLine() while your code uses is.read(buf).

DO these match together?

Upvotes: 0

waqaslam
waqaslam

Reputation: 68177

you dont need to read entire stream in one shot and put it in a byte array, in fact you read it in parts through while loop and put the contents in file stream gradually:

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();

Upvotes: 3

Related Questions