Кодът е написан на Java 1.7
Искам да направя някои големи промени в aдвоичен файл на бавна мрежа. За да се предпазите от загубата на мрежова връзка, вместо да пишете директно на файла, пиша в нов файл. Когато приключите с писането в новия файл, изтривам стария файл и преименувам новия файл на стария файл.
Моят въпрос е дали е по-добре новият файл да бъде 1. На същото място като оригиналния файл 2. Локално на компютъра
С 1. писането във файла може да бъде по-бавно, но преименуването трябва да бъде по-бързо, тъй като повечето от осите биха били незабавни. С 2 запис към файла трябва да бъде по-бързо, но след това преименуване на filwe ще бъде по-бавно.
Смятам, че отговорът е 1.
Всъщност, ако отворя Filechannel за двата файлаи прехвърляне на файлове директно от един канал в друг, байтовете трябва да идват от мрежата към компютъра ми и обратно към мрежата или могат да бъдат копирани директно от едно място в мрежата до другото.
Отговори:
0 за отговор № 1Предполагам, че файловете вероятно са монтирани чрез някаква мрежова файлова система (NFS, SMB) на вашия компютър, така че можете да имате достъп до тях като локални файлове, те са по-бавни.
Що се отнася до първия въпрос: Вие не получавате нищо, като първо напишете файла локално. В крайна сметка винаги трябва да преместите файла, за да коригирате мястото в мрежата и винаги включва операция "копиране на всички байтове". File.rename()
ще се провали, когато двата файла не са еднаквитвърд диск / монтиране. Така че трябва ръчно да копирате байтовете в целевата папка така или иначе. Някои IO рамки правят това за вас, когато е необходимо, но винаги се случват.
Както за директно копиране на данни между две дистанционниhosts: Има няколко мрежови файлови системи, които поддържат такива операции, но това е специална функция. Обичайните виновници (NFS и SMB) не се използват. Те винаги изтеглят целия файл от източника и след това го качват на целта.