/ / Какъв е най-добрият начин за прехвърляне на байтове между файловете в мрежата в Java [дубликат] - java, networking, nio

Кой е най-добрият начин за прехвърляне на байтове между файловете в мрежата в Java [duplicate] - java, networking, nio

Кодът е написан на Java 1.7

Искам да направя някои големи промени в aдвоичен файл на бавна мрежа. За да се предпазите от загубата на мрежова връзка, вместо да пишете директно на файла, пиша в нов файл. Когато приключите с писането в новия файл, изтривам стария файл и преименувам новия файл на стария файл.

Моят въпрос е дали е по-добре новият файл да бъде 1. На същото място като оригиналния файл 2. Локално на компютъра

С 1. писането във файла може да бъде по-бавно, но преименуването трябва да бъде по-бързо, тъй като повечето от осите биха били незабавни. С 2 запис към файла трябва да бъде по-бързо, но след това преименуване на filwe ще бъде по-бавно.

Смятам, че отговорът е 1.

Всъщност, ако отворя Filechannel за двата файлаи прехвърляне на файлове директно от един канал в друг, байтовете трябва да идват от мрежата към компютъра ми и обратно към мрежата или могат да бъдат копирани директно от едно място в мрежата до другото.

Отговори:

0 за отговор № 1

Предполагам, че файловете вероятно са монтирани чрез някаква мрежова файлова система (NFS, SMB) на вашия компютър, така че можете да имате достъп до тях като локални файлове, те са по-бавни.

Що се отнася до първия въпрос: Вие не получавате нищо, като първо напишете файла локално. В крайна сметка винаги трябва да преместите файла, за да коригирате мястото в мрежата и винаги включва операция "копиране на всички байтове". File.rename() ще се провали, когато двата файла не са еднаквитвърд диск / монтиране. Така че трябва ръчно да копирате байтовете в целевата папка така или иначе. Някои IO рамки правят това за вас, когато е необходимо, но винаги се случват.

Както за директно копиране на данни между две дистанционниhosts: Има няколко мрежови файлови системи, които поддържат такива операции, но това е специална функция. Обичайните виновници (NFS и SMB) не се използват. Те винаги изтеглят целия файл от източника и след това го качват на целта.