Witam

Zrobiłem ostatnio szyfrowanie plików - dużych plików (do. 100 MB) ładowanych do pamięci, odczytanych-zapisanych do pliku, przesyłanych socketem. Zrealizowałem i działa ale mam pewne wątpliwości co do efektywności.
Cel: Przesłanie bajtów załacznika maila do innego kompa i tam dump do pliku na hdd i potem encode/decode tego pliku. (konieczny dump pliku bo dll zewn przyjmuje tylko jako argument scieżkę do pliku)

ad1. Ładowanie plików-udostępniłem po prostu metodę która ma parametr byte[] i ten kto wywołuje ją musi mieć całą zawartość w byte[] i wszystkie te bajty za jednym razem trafiają do mojej metody. Jest jakaś alternatywa? maksymalny rozmiar tablicy bajtowej jest ok 2 GB o ile się nie mylę ale czy java nie wysypie sie po prostu przy jakieś wielkości?

ad2. Przesłanie socketem - dziele na paczki o okreslonej ilosci bajtów(np. 4096). Odbiór każdej paczki jest synchronicznie potwierdzany przez serwer. Użyłem do tego :

indata = new DataInputStream(new BufferedInputStream(tu socket.getInputStream()));

Jak widac wszystko jest na piechotę i teraz pytanie:

Czy jest sens robić np. md5 do całości/paczki? Czy przesyłane bajty w ten sposób mogą ulec przeinaczeniu? Czy na przyszłosć: jest gotowa biblioteka do tego typu rzeczy, która w prosty sposób udostępniała metody sensLargeFile/reciveLargeFile? Czy oprócz socketów jest inne rozwiązanie to przesyłania dużych plików, które umożliwiałoby bezpieczny transfer? Socket ma SSL no i w łątwy sposób można zaszyfrować każdą paczkę jakimś asymetrycznym algorytmem (ftp mi odpada bo jest nieszyfrowane a o sFTP prawie nic nie wiem).

ad3. Dump wielkiej tablicy bajtowej na dysk? Interesuje mnie wydajny sposób.
W sumie myślę czy po prostu nie zrzucać każdej paczki od razu na dysk zamiast pchać dopisywać do tablicy bajtowej która mi puchnie. Czy dla javy tak naprawdę jest jakies przeciwskazanie takiej wielkiej tablicy?

Pliki mają 10MB-100MB. Tak jak piszę - rozwiązanie działa i gdyby to były pliki 1MB-10Mb nie zawracałbym głowy ale martwi mnie możliwość wyskoczenia czasami java heap space albo zamulenia kompa.

Pozdrawiam