Указатель указателя FileOutputStream

Я ищу подтверждение, что 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(); } 

Вы также должны взглянуть на класс RandomAccessFile , который позволит вам искать определенную позицию и начинать писать там, не обрезая файл.

Вы должны внимательно прочитать api doc .

Открытие FileOutputStream в непривязанных файлах всегда стирает содержимое файла и записывает его в начале. Более того, аргумент offset метода write является смещением от начала данных (аргументом байтового массива), а не с начала файла.

Вы должны просто открыть поток в режиме добавления и начать писать, когда вы читаете n байтов данных, n – количество байтов, уже присутствующих в файле.