Új hozzászólás Aktív témák
-
fatal`
titán
válasz
WonderCSabo #5298 üzenetére
Én azt se értem, hogy normál (értsd nem inner class) osztálynak miért nem lehet static kulcsszót megadni, mint C#-ban. Helyette kell final, meg privát konstruktor.
-
WonderCSabo
félisten
válasz
M_AND_Ms #5297 üzenetére
A Singletonnak - ha normálisan akarja megírni az ember - privát konstruktora van, nem véletlenül. Én nem normálisan írtam meg. Singletonból örököl egy osztály, csak baj van belőle.
Egyébként a static metódusokat simán lehetne örökölni, túlterhelni subclassban, csak a Java nem támogatja ezt. Anno a híres "java sucks" cikkben (http://www.jwz.org/doc/java.html) ezt is felrótták Neki (about the language itself rész).
-
M_AND_Ms
veterán
válasz
WonderCSabo #5296 üzenetére
" Alapvetően a Singletonból nem is tudsz örökölni."
Örökölni tudsz, csak a singletonosságát nem. Mondjuk érthető, hisz az osztályszintű, static dolog.
-
WonderCSabo
félisten
Igen, Androidról beszélünk, nem véletlenül kell ez a szívás.
Amúgy: java-ban nincs függvény
Metódus van. De szerintem az adattag is c++ terminológia.
Erre inkább nem válaszolnék.
floatr: Igazából én mutatott példakódból indultam ki. Igen, valóban lehetne simán a példányban is. Szerintem itt a kódban az egyszerűség kedvéért osztályváltozó a cucc, így rövidebben le lehet írni.
A prefixes téma előjött, szerintem is hülyeség, erről már beszéltünk is hunfatal kollégával, de Android kódban illik.
(#5295) floatr: Ja én végeztem design pattern tárgyat, és elég sokat is olvasgattam ebben a témakörben, de igazából szerinte a singleton eléggé anti-pattern, kerülöm ahol lehet. Ezt a cuccot igazából nem gondoltam át, csak átvettem a példakódot.
Egyébként nem a static miatt van csak itt a lukra futás. Alapvetően a Singletonból nem is tudsz örökölni.
-
floatr
veterán
-
Lortech
addikt
Valószínűleg nem véletlenül írják. Látni kéne, milyen certet tudnak adni, de könnyen lehet, hogy a java default truststore-ja nem hitelesítené a netlock által kiadott tanúsítvánnyal aláírt kódot. Így sokra nem mész vele, ha ezt használod aláírásra, java verziótól függően vagy security warningot adna vagy meg is tagadná a program futtatását (pl 1.7_45-től).
A legutóbbi, biztonsági modellt érintő változtatásokkal még rúgtak egyet ebbe az amúgy is döglődő RIA platformba. Persze dicsérendő, hogy a biztonságra ráfeküdtek, csak már sokkal korábban kellett volna, kevesebb lett volna a fejlesztőknek okozott kár.. -
Osiris
őstag
Már mindent tisztának gondoltam erre a NetLock supporttól kapok egy ilyen választ:
A Java kódaláíráshoz jelenleg nem adható ki megfelelő tanúsítvány a Java komplikált tanúsítványkezelése és részben magyar törvényi keretek hiányosságai miatt.De akkor most mi van ha a fentiek szerint végigcsinálom a folyamatot, hitelesíttetem velük az aláíró tanúsítványt, majd azzal aláírogatom a java appleteket? Mitől nem fog működni?
-
-v-
addikt
Sorry androidot nem láttam, ahhoz nem (sem
) értek
(#5288) floatr: hát részletkérdés az igaz, de szerintem rontja eléggé az olvashatóságot. És ha pár ilyen részletkérdés mind "rosszul" van és összeadódnak, akkor máris bajban lehet az ember ... vagy legalábbis nekem ez a tapasztalatom, de lehet csak én szopom be mindig az ótvar legacy code baseket
-
Osiris
őstag
Java applet-et szeretnék szignózni. Azt tudom, hogy hogy kell. Arra lennék kíváncsi, hogy ha azt akarom, hogy az aláírás hiteles legyen, pl a netlock.hu-n szeretnék venni hozzá valamilyen megbízható tanúsítványt, akkor milyen típusút kellene vennem?
Azt tudom, hogy egy HTTP szervernél egy szerver ssl tanusítványt kell generálni, majd az aláírási kérelmet (CSR-t), fel kell tölteni a netlock-hoz és ők aláírják. Azt viszont nem értem, hogy ugyanez, hogy menne az appleteknél?Elvileg itt az jönne a fent linkelt leírás szerint, hogy:
1, "Digitális személyazonosságunk elkészítésének ezköze a keytool nevű alkalmazás. Első feladat, egy kulcspár generálása: " - eddig oké (gondolom az applet-et üzemeltető szervezet nevére szóló kulcs jó lesz).2, "Ha a kulcspár elkészült, a következő feladat, hogy a nyilvános kulcsunkhoz egy tanúsítvány készítsünk vagy készíttessünk. Ha egy hitelesítő hatóság (CA - Certification Authority) szolgaltatását kívánjuk igénybe venni, egy tanúsítvány hitelesítési kérelmet (CSR - Certifacte Signing Request) kell elküldenünk a kiválasztott CA-nak. Ezt is a keytool segítségével készíthetjük el"
...és itt akadtam el. A netlock az alábbi tanúsítványtípusokat tudja hitelesíteni:
- SSL tanúsítvány - Titkosító, hitelesítő (HTTP szerverekhez)
- Aláíró tanúsítvány - Ez lehet személyes, munkatársi, szervezetiEz alapján azt gondolom, hogy szervezeti kell. OK!
És akkor ezt a tanúsítványt én használhatom több applet aláírására (a fent linket doksi szerint)..
Akkor lehet, h meg is válaszoltam a kérédésem. Jól gondolom?
-
-v-
addikt
válasz
WonderCSabo #5267 üzenetére
Miért erőlteted ezt a staticot, én se értem ... amúgy ezek a helper classok mennyire bad practice... előjöttek a rossz emlékek
Miért használsz prefixet a fieldeknél? Az se túl jó gyakorlat manapság
(#5278) WonderCSabo: hát, a kód duplikáció az sose jó
Amúgy: java-ban nincs függvény
Metódus van. De szerintem az adattag is c++ terminológia.
edit: ja most látom, hogy androidról beszélünk
-
sudosu
csendes tag
válasz
MasterMark #5050 üzenetére
Egy kicsit benéztem a sorszámokat
szóval írtam egy választ de úgy látom utólag már tárgytalan, bocsi
-
floatr
veterán
válasz
WonderCSabo #5273 üzenetére
Értem én, hogy hogyan működne, csak azt nem, hogy miért. Mert tegyük fel, hogy a sUsageCounter is adattag, és nem statikus. Akkor a getHelper-nek adattagként kéne babrálnia, vagy hívhatna egy open() metódust is, ami ezt az értéket kezeli. Sakko szimmetrikus is a dolog, pláne ha van valami szemaforos cucc is a két metódus körül.
Nem szabad halmozni a statikus dolgokat singleton esetében. Sőt, amióta springgel írom a hello world-öt is, azóta nem is nagyon használok igazi singletont sem. Itt persze más a dolog, de sztem hagyni kéne, hogy a singleton a nyitáskor is gondoskodjon magáról, ne csak a záráskor. -
chabeee
aktív tag
válasz
PandaMonium #5275 üzenetére
Köszi szépen, hasonló módon oldottam meg
(#5276) gygabor88
nem, a klienstől érkező üzenetet a servernek átküldi, az teljesen okey volt, a servertől való küldés érdekelt, de már kialakítottam valahogy, azért köszi.Most egy másik probléma merült fel az eclipseszel, méghozzá ezt írja:
Error: Could not find or load main class hu.rf.server.Serverstackoverflow-n kb annyit írtak róla hogy rossz a classpath beállítás, de az elvileg tuti jó. Valaki találkozott ilyesmivel?
-
WonderCSabo
félisten
Ez egy proof of concept kód volt.
Egyelőre egy db - egy kezelőosztály, de ez valóban problémát okozna itt.
A két mapet csak belehánytam, a singleton miatt valóban lehetne a counter a példányban.
A példányt ki kell dobni, ennél a cuccnál legalábbis ha már bezártál egy példányt, újból nem nyithatod meg. -
axioma
veterán
válasz
WonderCSabo #5278 üzenetére
Valoszinuleg a konkret alkalmazasban nem relevans, de en itt erosnek talalom ezt a tulaltalanositast. Nem csak azert, mert ugyis a kodot kell valtoztatni, ha valtozik hogy milyen adatbazisokhoz kapcsolodik, az egy release-ben fix lista - legalabbis gondolom. Igy en siman karbantartasi feladatnak tartanam, hogy ha valahogy beesik egy uj, akkor annak letrehozd a neki megfelelo hozzarendelest is a map-ben. Ezzel a megvalositassal nem a kozvetlen leszarmazasi szintre szoritkozik a kod, tehat ha valamiert ugyanazt a db-t kesobb ketfele alosztallyal kezeled akarmiert, akkor ha jol ertem ezzel a koddal vagy elszall - ugyanahhoz ket kulon kulcs! -, vagy sokkal nagyobb karbantartasi igeny lesz az, hogy azoknal mindig visszakasztolva hivd a getHelper-t, plane ha nem csak egy helyen kell.
Masik: ket map ugyanazzal a kulccsal, ez tuti kell? Ha jol ertem, akkor egy alosztalyhoz max. egy ADBM-ed van, tehat neki - nem statikus - member valtozojakent boven eleg lenne a szamlalot tarolni.
Harmadreszt ha ez csak egy kezelo (szinte semmi mem.igeny, es a kapcsolatot ugyis a letezesetol fgtl. zarod - elorebocsatom, az adatbazisos reszhez nem ertek), akkor mi ertelme van a peldanyt kidobni majd kesobb ujra letrehozni?De lehet, hogy valamit nem latok benne ami plusz kell az adatbazisos parhuzamos kezeles vagy ilyenek miatt.
-
axioma
veterán
válasz
WonderCSabo #5273 üzenetére
En ugy ertem a feladatot, hogy az ososztaly tudja, milyen alosztalyai vannak, es a kod tobbszoros leirasa az egyetlen problemad. Akkor miert nem csinalod, hogy az ososztalyban egy map-be bedobod a class-hoz a neki rendelt felugyelot, es 1x irod meg a fuggvenyt ami a class-hoz visszakapott cuccost modositja?
(Bocs a pongyolasagert, meg en nem feltetlen tartanam ezt kovetendobbnek, mint a kulon letrehozast, meg lehetne persze tombbel es indexekkel, en csak a te felteteleidhez dobtam be egy szerintem megvalosithato es meg mindig nem tul ronda otletet.) -
skoda12
aktív tag
-
PandaMonium
őstag
válasz
chabeee #5274 üzenetére
Concurrency -ben nem nagyon vagyok otthon, de mivel más még nem válaszolt igyekszem segíteni, aztán majd jönnek a profik és megmondják, hogy kéne rendesen: Szerintem csinálj egy singletont ami a thread workereket tárolja és a singletonon keresztül letudod kérni az egyes workereket, a változóikat pedig egy egyszerű getter-el megszerzed.
-
chabeee
aktív tag
Sziasztok,
Multithreaded Servert csináltam, és a Client felöl érkező üzenetet átszeretném küldeni egy másik osztálynak. Ezt hogyan csinálhatom?
-
WonderCSabo
félisten
Azért kell usageCounternek is statikusnak lennie, mert a getHelper() többször is meg lehet hívva, ami statikus. Annyi a lényeg az egészben, hogy a getHelper() és a close() elvileg páronként vannak hívva, és ha a szám 0-ra esik akkor bezárja a db-t. Vagy mi volt a kérdésed?
-
floatr
veterán
válasz
WonderCSabo #5267 üzenetére
Namost lehet h én értelmezem félre a kódot, de ha factory metóduson keresztül létrehozva az osztály egy singleton, akkor a példányváltozón kívül egyetlen további változónak sem kéne statikusnak lennie. Neme?
Vagy a példánnyal van a gondod? Mert arra olyan példákat láttam, hogy ahány osztály, annyi változó. Ha külön maganer van típusonként, akkor abban vannak a példányok tömbben, mapben miegymás
-
WonderCSabo
félisten
válasz
M_AND_Ms #5270 üzenetére
Némi magyarázat ehhez az egészhez.
-
M_AND_Ms
veterán
válasz
WonderCSabo #5269 üzenetére
Az is lehet, a felvetésedet nem értem teljesen. (mobilról vagyok, kódokat nem írnék most ;-) )
Most látom, hogy nem csak új példány esetén akarod az inkrementálót meghívni, hanem mindig. (Mondjuk ezt nem értem miért jó, de biztos van oka. Mi van, ha close nélkül valaki újra elkéri a példányt?). Így viszont hirtelen én sem látok más megoldást (ha mindegyik db kezelő leszármazott külön saját kezelővel akar rendelkezni)
-
M_AND_Ms
veterán
válasz
WonderCSabo #5267 üzenetére
Ezt a nyitó-záró logikát tedd egy külön statikus függvénybe, bemenő paraméterként az ős db kezelővel, melynek konstruktora hívja meg a statikus nyitó-záró függvényt, önmagát átadva neki.
Ugyanígy járj el a close-zal is.
Természetesen a db kezelőid továbbra is singletonként példányosítsd! -
WonderCSabo
félisten
Nem jó sajnos, mert statikus függvénnyel is érem el a statikus változót, így nem tudom felüldefiniálni a függvényeket.
Mutatom mi a konkrét scenario:
public class DatabaseManager extends OrmLiteSqliteOpenHelper {
private static final AtomicInteger sUsageCounter = new AtomicInteger(0);
private static DatabaseManager sInstance = null;
public static synchronized DatabaseManager getHelper(Context context) {
if (sInstance == null) {
sInstance = new DatabaseManager(context);
}
sUsageCounter.incrementAndGet();
return sInstance;
}
@Override
public void close() {
if (sUsageCounter.decrementAndGet() == 0) {
super.close();
sInstance = null;
}
}
}Na most ebből lett két külön osztály, és ahhoz jelenleg ezt a kódot mind le kell kopiznom.
-
fatal`
titán
válasz
WonderCSabo #5265 üzenetére
Lehet, hogy rosszul közelítem a dolgot, de mi lenne, ha a Base abstract lenne és lenne egy abstract getter függvénye ami visszaadja a jelenleg static objectedet? Így az ősosztályba írhatod a függvényt elkerülve a kódismétlést, az leszármazott osztályban meg megírod a gettert, így külön objektumaid lesznek.
-
WonderCSabo
félisten
Sziasztok!
Van valami bevált pattern arra, hogy szimuláljuk azt, hogy a leszármazott osztályokban az ősben deklarált statikus változóból legyen mind egy-egy példány a gyerekekben?
Leírom mit szeretnék:
class Base {
static Object o = new Object();
}
class Derived1 extends Base {
}
class Derived2 extends Base {
}Teljesen helyesen ilyenkor csak egy Object példányosul, tehát a Derived1.o és a Derived2.o és a Base.o is ugyanarra az objektumra mutat. Azt szeretném elérni, hogy ezek mind más példányra mutassanak.
Azért lenne szükségem erre, mert Androidban adatbáziskezelő osztályaim vannak, amik nyitását/zárását static mezők felügyelik, és van leszármazási hierarchia az osztályok között. Mivel minden osztályból egy példány van (~singleton), ezért szükségem van, hogy minden osztályra külön "felügyelő" változó legyen, de nem akarok kódismétlést.
-
válasz
WonderCSabo #5263 üzenetére
Nagyon szívesen! :-)
-
válasz
WonderCSabo #5259 üzenetére
Itt találsz megoldást:
-
Soak
veterán
válasz
WonderCSabo #5257 üzenetére
Nincs stabilban.
-
fatal`
titán
válasz
WonderCSabo #5259 üzenetére
Version: Kepler Service Release 2
Build id: 20140224-0627Ez a legújabb stabil, de nekem sincs benne.
-
válasz
WonderCSabo #5257 üzenetére
Elvileg a Kepler SR2-ben, verziószám 4.3.2-ben már megvan a támogatása. Érdemes lenne megnézned, hogy melyik verziód van?
-
WonderCSabo
félisten
Most akartam kipróbálni, felraktam a JDK8-at. Viszont az Eclipse nem ajánlja fel az 1.8-as fordítást. Hogy lehet előhozni? Vagy akkor mégsincs a stabil verzióban? Én itt azt olvasom, hogy egy development patchet lehet felrakni a Keplerhez, vagy felrakni a dev Lunát, sehol se látok olyasmit, hogy a stabil Kepler támogatná.
-
Karma
félisten
válasz
WonderCSabo #5255 üzenetére
Csak amit neten láttam. Például itt van egy magyarázat, benne a "Real examples" alatt hogy hogy néz ki egy Iterable<T>.foreach, amit így bármilyen adattípusra meg lehet hívni, és még működni fog.
Régi a cikk, úgyhogy nem biztos, hogy a véglegesben is így van. De az elv látszik.
C#-nál meg nézd meg a LINQ-t. Az egész erre az elvre épül
-
Aethelstone
addikt
Igen, de ott jelen van ez a dolog. Java oldalon mindig is megvolt, hogy az interfész csak szignatúra, az abstract class meg default implementáció is. Hozzá kell szokni, hogy lehet ilyen is.
A "gond" ott van, hogy innentől fogva nem látom sok értelmét az abstract class-nakVagy nem látom sok értelmét ennek az újításnak
Szóval, nem rossz, de számomra nem túl Java kompatibilis
-
Karma
félisten
válasz
Aethelstone #5252 üzenetére
Érdekes módon más környezetben (ld. C#) ez nem okoz problémát
-
Aethelstone
addikt
Ez okosnak tűnik, de pont ezért van egy strict elválasztása az abstract osztálynak és az interfésznek, hogy ne keveredjenek a dolgok. Persze, tudom, hogy csak lehetőség, de használni fogják és onnantól igazából senki sem fogja tudni, hogy mit is kell valójában használni
-
floatr
veterán
A hírverésre gondolok. Amikor a java 8 kerül szóba, akkor általában a lambdát tolják előtérbe, pedig az csak ~3 sornyi rövidítés. Az ebből profitáló API-k, mint pl a stream, csak sokadlagos tényezők, pedig ennek több értelme van, mint egy anonim osztály shortcutnak.
Mindegy, nem akartam ebbe belefolyni, mert felesleges vita. Csak sokan teljesen becsavarodnak ettől a lambdás dologtól, mintha valami olyan történt volna, amitől más irányba kering a Hold.
-
-
fatal`
titán
"A default methodokkal interfészekhez lehet alapértelmezett implementációkat írni, tehát ha van valami közös funkció amit egy interfészt megvalósító osztályoknak mindnek tudnia kell, és pont ugyanúgy, akkor nem kell se abstract ősosztály, se kódot ismételni."
Ez mondjuk tud hasznos lenni.
-
floatr
veterán
Persze, az api egy dolog, de nem azt tolják, hanem a lambdát. Az meg csak ennyi; lett pár új operátor, meg egy kicsit rövidebb a kód, cserébe könnyebben bele lehet zavarodni.
Ez a default cucc is elég érdekes, amikor többszörös öröklés jön elő. Veszélyes vizekre tévedtek ezzel.
-
-v-
addikt
mindig azt vallottam és tartom is, hogy minél kevesebb kódot ír az ember, annál jobb
Háát ... én meg inkább Clean Code stb. felé hajlok. Meg afelé, hogy attól mert van kalapácsom, még ne lássak mindent szögnek. Van amikor igen, jó az ha minél kevesebb kódot irok, valamikor meg nem jó ...
Szeirntem is csak szintaktikai édestiszer ez a lambda, semmi ténylegesen újat nem hoz. -
Karma
félisten
válasz
WonderCSabo #5241 üzenetére
A default methodokkal interfészekhez lehet alapértelmezett implementációkat írni, tehát ha van valami közös funkció amit egy interfészt megvalósító osztályoknak mindnek tudnia kell, és pont ugyanúgy, akkor nem kell se abstract ősosztály, se kódot ismételni.
A végeredmény hasonló, mint az extension methodok C#-ban.
De ott van a streams API is, elég erős túlzás hogy nincs a Java 8-ban semmi új... Meg a lamdba szintaxissal sincs baj szerintem – mindig azt vallottam és tartom is, hogy minél kevesebb kódot ír az ember, annál jobb.
-
WonderCSabo
félisten
Én is azt vágtam le, hogy tényleg itt csak az anyonymous class szintaktikát spóroljuk le, tehát a lambda gyakorlatilag egy szintaktikai cukor, semmi más. Van egy olyan érzésem, hogy megint a legnagyobb szempont a visszafele kompatibilitás volt, mint a Genericnél, és ezért lett ez a low-budget dolog a lambdából. A default method az mi?
-
-v-
addikt
A lambda meg a funkcionalis dolgok tok jok, en konkretan most arra ertem amit a java 8-ba beleraktak ... na annak ebben a formaban semmi ertelme szerintem. De most tenyleg, sporolok par sort, hogy nem kell anonymus classt csinalnom, es ennyi (amit amugy is baromi ritkan, 1-2 speci esetben hasznalni, mert nem valami jo gyakorlat) ... a fordito meg ugyis ugyanazt csinalja belole.
Ezen kivul meg lettek default methodok, es ennyi, ez a java 8? De tenyleg, nem hozott semmi ujat ... -
bendikeee11
tag
Sziasztok. Elég kezdő szinten vagyok még programozásban. Leginkább csak az alapokat tudom. Egy olyan projekt-et gondoltam ki, amiben audio-t streamelnék élőbe, adatbázisból egy saját lejátszási listából, és egy php oldalon lehetne hallgatni, kérni zenéket online. A kérdésem az lenne, hogy esetleg valaki tudna nekem adni a stream, broadcast-os megoldáshoz valami segítséget, vagy hogy egyáltalán hol, és hogyan kezdjem el?
Üdv.
-
floatr
veterán
válasz
tothpetya #5230 üzenetére
Ennél lényegesen gyorsabb szvsz intézőben sem lesz, max ha másik file rendszert használsz. Másoláskor csak annyit tehetsz, hogy bejárod a fát. Mozgatáskor van annyi előnyöd, hogy egyazon partícióba nincsen fizikai mozgatás, csak a megfelelő bejegyzés(ek) átírása.
Kis file-ok másolásakor nem az USB3 teljesítménye igazán a szűk keresztmetszet, hanem a filerendszerbeli módosítások okozta pozicionálások. Sokszor a puffert sem olvassa tele az első lépésben sem.
-
n00n
őstag
válasz
Aethelstone #5231 üzenetére
Nekem is volt ilyen problémám és én sem találtam jobb megoldást.
-
tothpetya
újonc
válasz
Aethelstone #5229 üzenetére
Ezzel tisztában vagyok. Azért kérdeztem, hogy nem tudtok-e olyan megoldást, aminek nem kell végigjárni az egész fát. De akkor ezek szerint nem.
-
Aethelstone
addikt
válasz
tothpetya #5228 üzenetére
Az egy dolog, hogy Te hogyan érzed
Egyrészt nagyban függ a másolás sebessége a fájlok mennyiségétől és méretüktől is. Sok kicsit szart tök lassan másol. Ugye van megnyitási idő, másolási idő, lezárási idő. X fájl esetén ez pontosan Xszer annyi, mint mondjuk 1 fájl esetén.
-
tothpetya
újonc
válasz
Aethelstone #5227 üzenetére
USB3-as sebességhez én kicsit lassúnak érzem.
-
tothpetya
újonc
Akkor próbálom vázolni újra a helyzetet. Van egy könyvtáram legyen főkönyvtár a neve. Ebben van körülbelül 10.000 almappa. Ezekben a mappákban változó számú fájlok vannak. Pl 1-20-ig. Fájlok nem törlődnek, illetve NEM módosulnak. Naponta fel kell ezt a főkönyvtárat másolni egy HDD-re (amin rajta vannak az előző napi fájlok). A lényeg, hogy csak azt másoljuk fel, ami még nincs fent.
Akkor azt mondjátok, hogy az exist() vizsgálat gyorsabb, mint a FileAlreadyExistsException kivétel dobása NIO 1.7-es másolással?
-
floatr
veterán
válasz
Aethelstone #5221 üzenetére
Az az egyetlen probléma, hogy nem látom, mit csinál az ő kódjában a Files.copy(). Ami nálam a meglévő library-kben van, egy JBoss-féle implementáció, és nem foglalkozik azzal, ha ott van valami.
public static void copy(File source, File target, byte[] buff)
throws IOException {
BufferedInputStream in = new BufferedInputStream(new FileInputStream(
source));
BufferedOutputStream out = new BufferedOutputStream(
new FileOutputStream(target));
try {
while ((read = in.read(buff)) != -1) {
int read;
out.write(buff, 0, read);
}
} finally {
Streams.flush(out);
Streams.close(in);
Streams.close(out);
}
int read;
}Ha sok kicsi file-t kell másolni, akkor az feltételes végrehajtás érezhetően gyorsabb, mint a kivételkezelés. Lehet h ugyanezt megteszi, így egy kicsit nehéz saccolni. Mindenesetre a size() könyvtárakra nem működik, max a módosítás dátumával okoskodhat, de az sem tud normálisan működni, ha túl mély a fa.
Szerk.: Ah látom 1.7-es NIO.
-
Aethelstone
addikt
válasz
tothpetya #5222 üzenetére
Nos, azt írod, hogy mappaméretet hasonlítasz össze és ha ugyanakkora, akkor nem lép bele. Ez jó, de kevés. Van egy fájlod, amiben ez van: "Jo napot kivanok" és egy másik, amiben ez: "Jo kapot kivakok"
Méretilag koppra egyezik a két fájl, de az egyik más időpontban lett módosítva. Ezért csak a méret nem elég, módosítás dátuma is kell. Ezt a kolléga kódja megcsinálja. Másrészt meg méret meghatározásához úgy is bele kell menned és fel kell olvasnod a benne lévő fájlok metaadatait.
-
tothpetya
újonc
válasz
Aethelstone #5221 üzenetére
Nem baj, azért írtam ide, mert szeretnék minél több nézőpontot megismerni.
Az általam említett kódban is csak azt másoljuk ami nincs még meg (a fájlok nem változnak létrehozás után).
-
Aethelstone
addikt
-
floatr
veterán
válasz
tothpetya #5218 üzenetére
Ilyesmire gondoltam, nem teszteltem:
private static void prepare(File src, File dest, List<File> from, List<File> to) {
File f, d;
for (String p : src.list()) {
f = new File(src, p);
if (f.isDirectory()) {
d = new File(dest, p);
d.mkdir();
prepare(f, d, from, to);
} else {
from.add(f);
to.add(new File(dest, p));
}
}
}
private void copy(List<File> from, List<File> to) {
Iterator<File> itrFrom = from.iterator();
Iterator<File> itrTo = to.iterator();
File ff, ft;
int size = from.size();
for (int i = 0; itrFrom.hasNext() && itrTo.hasNext(); i++) {
ff = itrFrom.next();
ft = itrTo.next();
if (ff.length() != ft.length() || ff.lastModified() < ft.lastModified()) {
Files.copy(ff, ft);
}
// show progress: i/size
}
} -
floatr
veterán
válasz
tothpetya #5215 üzenetére
Amikor egy alkalmazás lekérdezi a könyvtár méretét, akkor vagy shell parancsot használ (ami nem túl hordozható megoldás), vagy szépen végignyálazza rekurzívan a belsejét. A leggyakrabban azt szokták csinálni, hogy a megadott útvonalat első körben beolvassák egy nagy listába, és minden elemhez tárolják a méretét, és az utolsó módosítás dátumát. A könyvtárakat nem is feltétlenül szükséges ebben a listában tárolni, mert az mkdirs rekurzívan létrehozza azokat, vagy esetleg a feltérképezéskor érdemes lehet már eleve létrehozni őket. Aztán második menetben összehasonlítod a méret/dátum értékeket, és ha nem stimmel, akkor másolsz. Akkor már csak a lista elemein kell végigfutni, és tudsz becsülni végrehajtási időt is.
-
tothpetya
újonc
Sziasztok!
Kellene egy kis segítség nekem. Van egy egyszerű Java program, ami csak annyit csinál, hogy sok kis fájlt másol egyik helyről a másikra. Naponta. Mivel elég sok van, ezért úgy kellene megoldani, hogy csak azokat másolja ami már nincs meg a másik helyen. Ezt a következőképpen oldottuk meg:
//Másolás függvénye:
public void masolas(File src, File dest)
throws IOException {
//Meg vizsgáljuk, hogy mappa-e:
if (src.isDirectory()) {
//Megpróbáljuk létrehozni a mappát (ha van, akkor nem csinál semmit)
dest.mkdir();
//Listába rendezzük a mappa tartalmát:
String files[] = src.list();
//Majd egyesével végigmegyünk rajta:
for (String file : files) {
//Elkészítjük a fájlokat:
srcFile = new File(src, file);
destFile = new File(dest, file);
//Rekurzív másolás:
masolas(srcFile, destFile);
}
} else {
try {
Files.copy(src.toPath(), dest.toPath());
System.out.println("Másolás: " + src);
} catch (FileAlreadyExistsException ex) {
System.out.println("Ez a fájl már meg van: " + src);
}
}
}Viszont így is körülbelül 15 perc alatt megy végig a fájlokon, ha meg van minden akkor is. Meg kellene gyorsítani. Ötletek?
Kb így néz ki a struktúra:
mappaneve1: fajl1, fajl2, fajl3
mappaneve2: fajl1
mappaneve3: fajl1 ... faj10Szóval van olyan mappa ami 10-15 fájlt is tartalmaz és ezek közül sok valószínűleg nem is változik. Arra gondoltam, hogy át kellene úgy alakítani, hogy először megnézi a mappa méretét és ha stimmel a kettő, akkor "bele se lép". Szerintetek ez kivitelezhető? Vagy azt is csak úgy tudja, hogy belelép és összeszámolja a tartalmát. Ha ez nem életképes, akkor valakinek van más ötlete?
-
Karma
félisten
Szerintem ekkor semmivel se vagy előrébb annál, mintha teleszórnád System.out.println()-nel a kódot. Az elvárt működés egyébként is az, hogy stdoutra lökje ki a metódusokat, nem kell a logger cicoma. Belőni egyébként nem bonyolult, a valóságban úgyis majd lesz egy wrapper lib előtte (pl. SLF4J).
Ha elrejted a kiírást egy olyan utility osztály mögé, aminek van egy "enter" meg egy "exit" metódusa, akkor meg pláne mindegy.
IIT rulez.
-
Dolby
senior tag
"A forrásprogramnak a laboratóriumban rendszeresített (nem a hallgatók által írt package hozzáadása nélküli) JDK alatt lefordíthatónak és futtathatónak kell lennie"
Sajnos a kiírás miatt nem használhatunk semmilyen kiegészítést a nyelvhez, ezért próbálnám meg a logger-rel megoldani. :-/
-
Karma
félisten
AOP segítségével simán meg tudod egy helyről oldani minden metódus naplózását. Csak aztán meg kell indokolnod a konzulensnek.
-
Dolby
senior tag
Sziasztok!
Egy háziban szkeletont kell készíteni a kiírt programhoz, amiben azt várják, hogy a metódus hívásokat, a metódus által kapott paramétereket és a visszatérési értékeket kiírja a program 1-1 tesztelt folyamatrészletről.
Mivel nem annyira tartom szerencsésnek ha minden metódust kiegészítek külön kiírásokkal, keresgéltem és a util/logging/logger felmerült mint lehetőség, de egyenlőre a beállításaival kicsit hadakozom. A kérdésem h be lehet állítani h a fenti infókat írja csak ki? Hogy ne szenvedjek fölöslegesen ha nem is fogja tudni :-D -
axioma
veterán
válasz
szabodani #5194 üzenetére
1. Hol a pont osztalyod? (am. irhatnad nagybetukkel az osztalyneveket...) ; ettol fugg hogy hogyan kene tovabb (az is egy osztaly a koordinatakkal mint memberekkel, meg allitgato fuggvenyekkel, vagy mi?)
2. a constructorod nem felel meg a feltetelnek, ott kene a pontot is megadni, nem kulon setter fuggvenyben (amit amugy is illene set<ize> nevvel irni, mondjuk nem tudom hogy magyar elnevezeseknel mi erre a szokas) Raadasul az osztaly azert osztaly, hogy onmaga integritasara vigyazzon, tehat effektive egyetlen pont settere itt felettebb alkalmatlan a feladatra, legfeljebb ujBalFelso lehetne, es akkor egybol egy eltolast - minden pont ujraszamolasat - kene megvalositani. Ezt visoznt nem kerte a feladat... -
McReay
aktív tag
Valaki nem tudja véletlenül, hogy a MapServer nevű alkalmazást, hogy lehet beizzítani Windows alá és később java nyelven felületet csiholni hozzá?
Szükséges lenne itthoni környezet kialakítása, hogy tudjam localhoston tesztelni/fejleszteni a dolgot.
Egy beüzemelési leírás jól jönne lenne hozzá, de az interneten nem találtam!
Oldalon található user guide alapján nem ment a dolog!
-
Valószínűleg az lesz nálunk is, még pár napig van meg az éves subscription, ha addig nem érkezik meg az új akkor rá leszünk kényszerítve rendesen. :-) Személy szerint nem bánnám, néha meg kell lépni 1-2 verzióváltást. Semmi speciális ficsört nem használunk, ami indokolná a myeclipse-t. Azon viszont meglepődtem, hogy máshol is "divat".
@WonderCsabo: Akkor neked is SR2 van már a 4.3.2-es verzió pont ez.
-
Használtál már myeclipse csodát? Nah az az igazi "csoda".. Sajnos a cégnél ez fut, 1000éves verziókban természetesen. :-( Bughalmaz, az általa létrehozott projekteket nem lehet más ide-be behúzni, egyrészt mert sajnos property fileokat generál, másrészt mert sajna a projektfájlok is az svn részeit képzik ügyesen okosan :-)
Új hozzászólás Aktív témák
Hirdetés
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- BESZÁMÍTÁS! MSI B450M R5 5600 16GB DDR4 512GB SSD RTX 3060 12GB THERMALTAKE Core V21 Enermax 650W
- BESZÁMÍTÁS! MSI B450M R5 3600 16GB DDR4 512GB SSD RTX 2060 Super 8GB THERMALTAKE Core V21 500W
- BESZÁMÍTÁS! Gigabyte B650M R7 7700 32GB DDR5 1TB SSD RTX 5070 12GB BE QUIET! Pure Base 500DX 650W
- Nintendo Switch OLED 20.1.1 okosított Dual-Boot Cfw + 256GB MicroSD + Atmosphere 1.9.1, 3 hó garival
- BESZÁMÍTÁS! Gigabyte A620M R5 7600 32GB DDR4 512GB SSD RTX 5060 Ti 16GB Zalman i3 NEO Enermax 650W
- 10% -tól elvihető.Országosan a legjobb BANKMENTES részletfizetési konstrukció! ACER PREDATOR HELIOS
- Azonnali készpénzes Sony Playstation 4 Slim / PS4 Pro felvásárlás személyesen/csomagküldéssel
- Beszámítás! Lenovo Legion Slim 5 16AHP9 notebook - R7 8845HS 16GB RAM 512GB SSD RTX 4060 8GB Win11
- Intel Core 2 Quad Q9550 2.83GHz LGA775 Processzor
- Asus ROG G20AJ - Intel Core i7-4790, GTX 980
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged