Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

using write() method, the file gets too big

I try to write to a file, the data that I receive from a socket , I store the data in an array but when I write them, the file gets too big ... I think it is caused by using a big array , as i don't know the length of the data stream...

But checking the method write it is stated that write(byte[] b) Writes b.length bytes from the specified byte array to this file output stream, the write() method reads the length of the array but the length is 2000... How can i know the length of the data that will be written?

...
byte[] Rbuffer = new byte[2000];
dis = new DataInputStream(socket.getInputStream());
dis.read(Rbuffer);
writeSDCard.writeToSDFile(Rbuffer);

...

void writeToSDFile(byte[] inputMsg){



    File root = android.os.Environment.getExternalStorageDirectory();
    File dir = new File (root.getAbsolutePath() + "/download");

    if (!(dir.exists())) {
         dir.mkdirs();
     }

    Log.d("WriteSDCard", "Start writing");

    File file = new File(dir, "myData.txt");

    try {
        FileOutputStream f = new FileOutputStream(file, true);
        f.write(inputMsg);
        f.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
        Log.i(TAG, "******* File not found. Did you" +
                " add a WRITE_EXTERNAL_STORAGE permission to the   manifest?");
    } catch (IOException e) {
        e.printStackTrace();
    }
}
like image 407
G.V. Avatar asked Apr 09 '26 01:04

G.V.


1 Answers

read() returns the number of bytes that were read, or -1. You are ignoring both possibilities, and assuming that it filled the buffer. All you have to do is store the result in a variable, check for -1, and otherwise pass it to the write() method.

Actually you should pass the input stream to your method, and use a loop after creating the file:

int count;
byte[] buffer = new byte[8192];
while ((count = in.read(buffer)) > 0)
{
    out.write(buffer, 0, count);
}

Your statement in a now-deleted comment that a new input stream is created per packet is not correct.

like image 154
user207421 Avatar answered Apr 11 '26 13:04

user207421



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!