• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

FileOutputStream jako pole w klasie.

0 głosów
272 wizyt
pytanie zadane 9 czerwca 2019 w Java przez Adam Polak Początkujący (430 p.)
Dzień Dobry,

Mam listę którą chcę serializować. Trzymam ją w klasie, powiedzmy DoSerializacji(). W niej niech będzie metoda writeToFile(). Żebym mógł to zrobić muszę mieć obiekt FileOutputStream  i ObjectOutputStream; Jednak nie chce inicjalizować ich w writeToFile(){  FileOutputStream fos = new FileOutputStream(file, false);

ObjectOutputStream oos = new ObjectOutputStream(fos);}

Chciałbym zainicjalizować je jako pola klasy; DoSerializacji(){

private FileOutputStream fos = new FileOutputStream(file, false)

private ObjectOutputStream oos = new ObjectOutputStream(fos) }

problem w tym, że wtedy albo muszę "obudować" je w try catch, albo stworzyć konstruktor który będzie obsługiwał wyjątek. Który z tych sposobów jest lepszy?

1 odpowiedź

+1 głos
odpowiedź 9 czerwca 2019 przez mbabane Szeryf (79,240 p.)
wybrane 11 czerwca 2019 przez Adam Polak
 
Najlepsza

Też w sumie zależy jak bardzo ma to być zhermetyzowane. Bo możesz przykładowo zrobić tak:

FileOutputStream fos = new FileOutputStream(...);
Serializer s = new Serializer(fos);
s.serialize(object);

Czyli przekazanie przez konstruktor juz zbudowanego OutputStreama. Jako typ parametru konstruktora Serializer, można użyć bazowego OutputStream'a. Uzyskasz wtedy, o ile się nie mylę, dość uniwersalną konstrukcje gdzie będziesz mógł serializować obiekt do dowolnego stream'a.

A jeśli chcesz bardziej to zhermetozywać to możesz przekazać przez konstruktor tylko samą ścieżkę do pliku (czy tam obiekt typu File) i resztę załatwi implementacja klasy Serializer. Wypadało by też wtedy zmienić nazwę tej klasy na FileSerializer.

 

Wydaje mi się też, że słabo będzie jeśli zrobisz to tak: (tzn. poprzez inicializację w polu klasy)

class Serializer {
 private FileOutputStream fos = new FileOutputStream(...);
  // reszta kodu.
}

Podobne pytania

0 głosów
0 odpowiedzi 569 wizyt
pytanie zadane 20 listopada 2022 w Inne języki przez Elektronik Nowicjusz (160 p.)
0 głosów
1 odpowiedź 1,086 wizyt
pytanie zadane 7 października 2021 w Sprzęt komputerowy przez Tyrkosz Nowicjusz (120 p.)

93,771 zapytań

142,731 odpowiedzi

323,383 komentarzy

63,371 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...