3976
Vývoj / Re:Java a C# - porovnání práce se Zip souborem
« kdy: 28. 04. 2017, 22:36:23 »Takže mýlka vznikla z toho důvodu, že ten ZipInputStream je Stream a zároveň iterátor. Je to špatný OOP návrh, který porušuje Single responsibility princip, v dokumentaci třídy není uvedeno, že se jedná o kočkopsa a proto mi nedošlo, jak se to má používat. Správné by bylo, kdyby ZipInputStream byl iterátor nad ZipEntry, a na ZipEntry by mělo getInputStream(). Ale pokud dělali Javu stejní kokodi, jako dělali SQL Developera, Eclipse a podobné, tak se není moc čemu divit.Neumíte naprogramovat domácí úkol, který je možná i na dvacet řádků, neumíte si přečíst dokumentaci, ale hlavně že víte, jak by to mělo vypadat a co dělají všichni ostatní špatně.
Pro vaší informaci, ZipInputStream je potomek třídy FilterInputStream, která (překvapivě) funguje jako filtr, tj. na vstupu dostane jeden InputStream, vy s ní pracujete zase jako s InputStreamem a ta třída uvnitř provádí nějaké filtrování toho streamu. Chápu, že je to napsané až na pátém řádku dokumentace, a tak daleko jste nedočetl.
Ta třída existuje pravděpodobně „do počtu“ s ostatními třídami, které dělají (de)komprimaci nad streamy. Nejhorší na té třídě je, že vůbec existuje, nebo že u ní není uvedeno důrazné varování, že její použití je jen na vlastní nebezpečí a podrobné vysvětlení, co ta třída vlastně dělá. Protože ta třída čte jednotlivé položky ZIPu tak jak jsou v souboru uvedeny za sebou, a ignoruje adresář uložený na konci souboru. Přitom ale v tom adresáři je uvedeno, co je v tom ZIPu doopravdy. Když budete ZIP procházet pomocí ZipInputStreamu, můžete klidně rozbalit smazané soubory, starou verzi souboru nebo soubor budete mít špatně pojmenovaný. Což je podle mne mnohem horší než to, že si neumíte přečíst dokumentaci a nechápete, jak se ta třída používá.