Я ищу подтверждение того, что FileOutputStream
работает так, как я думаю. Я загружаю файл и, в случае потери сетевого подключения, пытаюсь возобновить загрузку с того места, где он был прерван.
Как я пытаюсь сделать это, чтобы открыть FileOutputStream как не добавляющийся и ничего не записывающий со смещением. У меня вопрос, будет ли это работать или удаление его без добавления удаляет содержимое? Кроме того, если я записываю со смещением, будет ли он продолжать запись после этой позиции в файле при последующих вызовах записи?
File outFile = new File(outFileName);
FileOutputStream out = new FileOutputStream(outFile);
HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
long fileSize = connection.getContentLength();
int status = DOWNLOADING;
connection.connect();
InputStream in = connection.getInputStream();
long downloaded = in.skip(outFile.length());
publishProgress(downloaded, fileSize);
try
{
int read = 0;
byte buffer[] = new byte[MAX_BUFFER_SIZE];
// Skip ahead in the out buffer
out.write(buffer, (int)downloaded, read);
while(status == DOWNLOADING)
{
if(!NetworkUtils.isConnected(_context))
{
// This breaks us out of the doInBackground in the AsyncTask
_downloadFailed = true;
throw new Exception("Network Connectivity Lost!");
}
read = in.read(buffer);
if(read == -1)
{
publishProgress(fileSize);
break;
}
out.write(buffer, 0, read);
downloaded += read;
publishProgress(downloaded);
}
}
finally
{
out.close();
in.close();
connection.disconnect();
}